我有一个使用JSpinner且使用SpinnerNumberModel值的double的GUI。

更改EditorJSpinner的内容后,我希望背景更改为黄色(以显示当前显示的值不是JSpinner或“ 。

如果该内容无效(例如,超出了我的Model指定的允许范围或文本为“ abc”的范围),则背景应更改为红色。

我已经尝试通过SpinnerNumberModel实现我想要的功能,但是并没有成功,而且我不确定它是否仍然可以正常工作,因为我需要检查聚焦和散焦之间的内容。

我检查了Tutorials中是否存在FocusListener组件的所有Listeners,但是找不到适合该工作的正确的教程。 (here I informed myself

我是Swing概念的新手,非常感谢能帮助我更进一步解决问题的任何帮助,但同时也有助于总体了解Listeners以及如何在这种情况下更好地使用它们!

我真正的基本代码示例,其中提到了使用焦点侦听器的不良尝试:

public class test implements FocusListener{

JFrame frame;

SpinnerNumberModel model;
JSpinner spinner;
JComponent comp;
JFormattedTextField field;

public test() {
    JFrame frame = new JFrame("frame");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));

    model = new SpinnerNumberModel(0., 0., 100., 0.1);
    spinner = new JSpinner(model);
    comp = spinner.getEditor();
    field = (JFormattedTextField) comp.getComponent(0);
    field.addFocusListener(this);

    frame.getContentPane().add(spinner);
    frame.getContentPane().add(new JButton("defocus spinner")); //to have something to defocus when testing :)
    frame.pack();
    frame.setVisible(true);
}

@Override
public void focusGained(FocusEvent e) {
    // TODO Auto-generated method stub
    //when the values of the field and the spinner don't match, the field should get yellow
    if(!field.getValue().equals(spinner.getModel().getValue())) {
        field.setBackground(Color.YELLOW);
    }
}

@Override
public void focusLost(FocusEvent e) {
    // TODO Auto-generated method stub
    //if they match again, reset to white
            if(!field.getValue().equals(spinner.getModel().getValue())) {
                field.setBackground(Color.RED);
            }
}
}

最佳答案

JSpinner使用文本字段作为微调器的编辑器

因此,您可以将DocumentListener添加到用作编辑器的文本字段的Document中。

就像是:

JTextField textField = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField());
textField.getDocument.addDocumentListener(...);


然后,当添加/删除文本时,将生成一个DocumentEvent,您可以进行错误检查。阅读有关Listener For Changes on a Document的Swing教程中的部分,以获得更多信息和工作示例。

关于java - 如何根据字段的当前编辑内容更改JSpinner的背景颜色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44871170/

10-13 03:41