首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何反演JSpinner布局

如何反演JSpinner布局
EN

Stack Overflow用户
提问于 2022-02-23 23:05:17
回答 1查看 54关注 0票数 1

我有一个JSpinner:

微调器

我希望上/下按钮在左边,也希望文本对齐在左边。

有什么简单的方法我可以做到这一点吗?谢谢

代码语言:javascript
复制
JSpinner spinner = new JSpinner();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 00:19:50

您可以重写在BasicSpinnerUI中找到的用于创建下一个按钮和前一个按钮的方法:

自定义旋转用户界面:

代码语言:javascript
复制
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.border.CompoundBorder;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicArrowButton;
import javax.swing.plaf.basic.BasicSpinnerUI;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.BorderLayout;

public class MyJSpinnerUI extends BasicSpinnerUI{
    public static ComponentUI createUI(JComponent c) {
        return new MyJSpinnerUI();
    }

    @Override 
    protected Component createNextButton(){
        // change arrow direction: up becomes right
        Component c = createArrowButton(SwingConstants.EAST);
        c.setName("Spinner.nextButton");
        c.setSize(new Dimension(5, 5));
        installNextButtonListeners(c);
        return c;
    }

    @Override
    protected Component createPreviousButton() {
        // change arrow direction: down becomes left
        Component c = createArrowButton(SwingConstants.WEST);
        c.setName("Spinner.previousButton");
        c.setSize(new Dimension(5, 5));
        installPreviousButtonListeners(c);
        return c;
    }

    @Override
    public void installUI(JComponent c) {
      super.installUI(c);
      c.removeAll();
      c.setLayout(new BorderLayout());

      // here you can play with their positioning
      c.add(createPreviousButton(), BorderLayout.WEST);
      c.add(createEditor(), BorderLayout.CENTER);
      c.add(createNextButton(), BorderLayout.EAST);
    }

    // private method inside BasicSpinnerUI
    private Component createArrowButton(int direction) {
        JButton b = new BasicArrowButton(direction);
        Border buttonBorder = UIManager.getBorder("Spinner.arrowButtonBorder");
        if (buttonBorder instanceof UIResource) {
            // Wrap the border to avoid having the UIResource be replaced by
            // the ButtonUI. This is the opposite of using BorderUIResource.
            b.setBorder(new CompoundBorder(buttonBorder, null));
        } else {
            b.setBorder(buttonBorder);
        }
        b.setInheritsPopupMenu(true);
        return b;
    }
}

演示:

代码语言:javascript
复制
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import java.awt.Dimension;
import java.awt.FlowLayout;  

public class JSpinnerTest{

    public static void main(String[] args) {
        JFrame frame = new JFrame("JSpinner changed arrows");  
        JPanel panel = new JPanel();  
        JSpinner jSpinner = new JSpinner();

        // apply your custom Spinner UI
        jSpinner.setUI(new MyJSpinnerUI());

        jSpinner.setPreferredSize(new Dimension(100, 40));
        panel.setLayout(new FlowLayout());  
        panel.add(jSpinner);  
        frame.add(panel);
        frame.setVisible(true);  
        frame.setSize(1000, 400);  
        frame.setLocationRelativeTo(null);  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71245069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档