Java 禁用JSpinner上的向上和向下箭头按钮

Java 禁用JSpinner上的向上和向下箭头按钮,java,swing,jspinner,Java,Swing,Jspinner,我有一个JSpinner,在启用编辑时,我想控制它。键盘很简单,但是旁边的小箭头小部件呢?我甚至在JSpinner源代码或其任何封闭类中都找不到对它们的引用。您无法控制这两个箭头按钮,但您可以这样做 private void buttonActionPerformed(java.awt.event.ActionEvent evt) { p.setEnabled(false); } 假设您想按下

我有一个JSpinner,在启用编辑时,我想控制它。键盘很简单,但是旁边的小箭头小部件呢?我甚至在JSpinner源代码或其任何封闭类中都找不到对它们的引用。

您无法控制这两个箭头按钮,但您可以这样做

    private void buttonActionPerformed(java.awt.event.ActionEvent evt) {                                  

          p.setEnabled(false);

} 

假设您想按下一个按钮,而用户根本无法使用jspinner,这是一个提示,提示您可以进行更多操作,您也可以修改它

您还可以允许使用jspinner,直到使用

   if(spinner.getValue()==10){
       //show error message and 
       spinner.setEnabled(false);
   }
您可以使用
setUI()
方法隐藏Jspinner箭头

public void hideSpinnerArrow(JSpinner spinner) {
        Dimension d = spinner.getPreferredSize();
        d.width = 30;
        spinner.setUI(new BasicSpinnerUI() {
            protected Component createNextButton() {
                return null;
            }

            protected Component createPreviousButton() {
                return null;
            }
        });
        spinner.setPreferredSize(d);
    }
如您所见,只需使
createNextButton()
createPreviousButton()
返回
null


因为我们使用了BasicUI,所以必须再次设置微调器大小。我使用了
PreferredSize

如果所使用的UI类派生自
basicsPennerUI
,则可以通过以下方式删除箭头按钮:

    for (Component component : spinner.getComponents()) {
        if (component.getName() != null && component.getName().endsWith("Button")) {
            spinner.remove(component);
        }
    }

JSpinner#setEnabled
提供的功能有什么问题?我看不出这与禁用textfield编辑器和箭头按钮有什么不同可能什么都没有,为什么我没有想到这一点,但实际上,我仍然很好奇这些按钮隐藏在哪里。这些按钮包含在
SpinnerUI
类中。例如,请参见
BasicPennerUI
类,在该类中,您可以覆盖
createNextButton
方法,这意味着您可以访问这些按钮这里有两个BasicCarrowButton,可以重新布局、禁用、更改/替换这些组件、更改图标,我想将图标从黑色更改为红色