如何使用带有左右箭头的Java微调器?

如何使用带有左右箭头的Java微调器?,java,spinner,Java,Spinner,我在JavaSwing中使用过JavaSpinner,但它有上下箭头,有没有办法设置它的方向,使箭头向左和向右 多亏了让·弗朗索瓦·萨瓦德的回答,我又向前迈进了一步,但仍然不完全正确,我有以下几句话: public void installUI(JComponent c) { super.installUI(c); c.removeAll(); FlowLayout FL=new FlowLayout(); FL.setHgap(0); c.set

我在JavaSwing中使用过JavaSpinner,但它有上下箭头,有没有办法设置它的方向,使箭头向左和向右

多亏了让·弗朗索瓦·萨瓦德的回答,我又向前迈进了一步,但仍然不完全正确,我有以下几句话:

  public void installUI(JComponent c)
  {
    super.installUI(c);
    c.removeAll();
    FlowLayout FL=new FlowLayout();
    FL.setHgap(0);
    c.setLayout(FL);
    JComponent editor=createEditor();
    editor.setPreferredSize(new Dimension(30,16));
    c.add(editor);
    c.add(createPreviousButton());
    c.add(createNextButton());
  }

间距不正确,如何修复?我在上面几行硬编码了,如何自动为文本提供适当的空间?

在google上进行一个简短的搜索,让我找到了一个自定义的
JSpinner
实现

public class LeftRightSpinnerDemo {

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {
        new LeftRightSpinnerDemo().makeUI();
      }
    });
  }

  public void makeUI() {
    JSpinner spinner = new JSpinner();
    spinner.setUI(new LeftRightSpinnerUI());

    JFrame frame = new JFrame();
    frame.add(spinner);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}

class LeftRightSpinnerUI extends BasicSpinnerUI {

  public static ComponentUI createUI(JComponent c) {
    return new LeftRightSpinnerUI();
  }

  @Override
  protected Component createNextButton() {
    Component c = createArrowButton(SwingConstants.EAST);
    c.setName("Spinner.nextButton");
    installNextButtonListeners(c);
    return c;
  }

  @Override
  protected Component createPreviousButton() {
    Component c = createArrowButton(SwingConstants.WEST);
    c.setName("Spinner.previousButton");
    installPreviousButtonListeners(c);
    return c;
  }

  // copied from BasicSpinnerUI
  private Component createArrowButton(int direction) {
    JButton b = new BasicArrowButton(direction);
    Border buttonBorder = UIManager.getBorder("Spinner.arrowButtonBorder");
    if (buttonBorder instanceof UIResource) {
      b.setBorder(new CompoundBorder(buttonBorder, null));
    } else {
      b.setBorder(buttonBorder);
    }
    b.setInheritsPopupMenu(true);
    return b;
  }

  @Override
  public void installUI(JComponent c) {
    super.installUI(c);
    c.removeAll();
    c.setLayout(new BorderLayout());
    c.add(createNextButton(), BorderLayout.EAST);
    c.add(createPreviousButton(), BorderLayout.WEST);
    c.add(createEditor(), BorderLayout.CENTER);
  }
}
确保在我删除它们时添加正确的
import
s以减轻代码的负担


参考原始帖子。

你能发布链接吗?太棒了,我可能会在我自己的项目中使用它:)很高兴听到它的帮助:)太好了,但我希望两个箭头在右侧,就像原始微调器一样,如下:[text<>]@Frank然后只需修改UI,我相信您可以通过查看
installUI
方法来了解:)