java - 如何拥有带有左右箭头的 Java Spinner?

标签 java spinner

我在 Java Swing 中使用了 java Spinner,但它有向上和向下箭头,有没有办法设置它的方向,使箭头向左和向右?

感谢 Jean-François Savard 的回答,我又近了一步,但仍然不太正确,我有以下几行:

  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);
  }
}

确保添加正确的导入,因为我删除了它们以减轻代码负担。

引用this对于原始帖子。

关于java - 如何拥有带有左右箭头的 Java Spinner?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903436/

相关文章:

java - 从servlet加载图片到JSP

java正则表达式解析部分标题标签

android - 微调器 OnItemSelected 不起作用

Android - 如何将列表框实现为模态对话框/弹出窗口

java - 无法在spring工具中下载maven依赖项

java - AuthenticationSuccessHandler 未被调用

java - Activity 更改时 Android 微调器不保留值(与生命周期相关)

java - Android Spinner - 防止刷新后关闭

Android如何从数据驱动的微调器中获取选定的项目

带有 OAuth 的 Java 安全框架