Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法禁用日期编辑器的编辑';是JTextField吗?_Java_Swing_Jtextfield_Jspinner - Fatal编程技术网

Java 无法禁用日期编辑器的编辑';是JTextField吗?

Java 无法禁用日期编辑器的编辑';是JTextField吗?,java,swing,jtextfield,jspinner,Java,Swing,Jtextfield,Jspinner,过去我一直在使用下面的技术来禁用对JSpinners的编辑。然而,它似乎不能与日期编辑器中的JTextField一起工作。是否有原因导致此editor.getTextField().setEditable(false)在这种情况下不起作用?有没有办法让它发挥作用 驾驶员等级 public class CLIClockDriver { public static void main(String[] args) { SwingUtilities.invokeLater(ne

过去我一直在使用下面的技术来禁用对
JSpinner
s的编辑。然而,它似乎不能与
日期编辑器中的
JTextField
一起工作。是否有原因导致此
editor.getTextField().setEditable(false)
在这种情况下不起作用?有没有办法让它发挥作用

驾驶员等级

public class CLIClockDriver {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ClockFrame();
            }
        });
    }
}
public class ClockFrame extends JFrame implements ActionListener {

    private static final long serialVersionUID = -7009835158496820266L;
    public static final Dimension SIZE = new Dimension(400, 200);

    private final Timer secondsTimer = new Timer(1000, this);
    private final FluentGridBagConstraints gbc = new FluentGridBagConstraints();
    private JPanel mainPanel;
    private JLabel clockLabel;
    private JSpinner newAlarmHourSpinner, newAlarmMinuteSpinner, newAlarmAMPMSpinner;

    public ClockFrame() {
        super();
        setLayout(new GridBagLayout());
        initializeGUIComponents();
        setPreferredSize(SIZE);
        setResizable(false);
        setTitle(Constants.APPLICATION_NAME);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
        secondsTimer.start();
    }



    private void initializeGUIComponents() {
        mainPanel = new JPanel(new GridBagLayout());

        clockLabel = new JLabel();
        updateClock();
        mainPanel.add(clockLabel, gbc.setXY(0, 0));

        newAlarmHourSpinner = new JSpinner();
        newAlarmHourSpinner.setModel(new CyclingSpinnerNumberModel(9, 1, 12, 1));
        DefaultEditor editor = new JSpinner.DefaultEditor(newAlarmHourSpinner);
        editor.getTextField().setColumns(2);
        editor.getTextField().setEditable(false);
        newAlarmHourSpinner.setEditor(editor);
        mainPanel.add(newAlarmHourSpinner, gbc.reset().setXY(0, 1));

        newAlarmMinuteSpinner = new JSpinner();
        SpinnerDateModel model = new SpinnerDateModel();
        model.setCalendarField(Calendar.MINUTE);
        newAlarmMinuteSpinner.setModel(model);
        DateEditor dateEditor = new JSpinner.DateEditor(newAlarmMinuteSpinner, "mm");
        editor.getTextField().setColumns(2);
        editor.getTextField().setEditable(false);
        newAlarmMinuteSpinner.setEditor(dateEditor);
        mainPanel.add(newAlarmMinuteSpinner, gbc.reset().setXY(1, 1));

        newAlarmAMPMSpinner = new JSpinner();
        newAlarmAMPMSpinner.setModel(new CyclingSpinnerListModel("AM", "PM"));
        editor = new JSpinner.DefaultEditor(newAlarmAMPMSpinner);
        editor.getTextField().setColumns(2);
        editor.getTextField().setEditable(false);
        newAlarmAMPMSpinner.setEditor(editor);
        mainPanel.add(newAlarmAMPMSpinner, gbc.reset().setXY(2, 1));

        add(mainPanel, gbc.reset().setXY(0, 0));
    }

    private void updateClock() {
        clockLabel.setText(Alarm.TIME_FORMAT.format(new Date()));
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        if(event.getSource() == secondsTimer) {
            updateClock();
        }
    }


}
摇摆类

public class CLIClockDriver {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ClockFrame();
            }
        });
    }
}
public class ClockFrame extends JFrame implements ActionListener {

    private static final long serialVersionUID = -7009835158496820266L;
    public static final Dimension SIZE = new Dimension(400, 200);

    private final Timer secondsTimer = new Timer(1000, this);
    private final FluentGridBagConstraints gbc = new FluentGridBagConstraints();
    private JPanel mainPanel;
    private JLabel clockLabel;
    private JSpinner newAlarmHourSpinner, newAlarmMinuteSpinner, newAlarmAMPMSpinner;

    public ClockFrame() {
        super();
        setLayout(new GridBagLayout());
        initializeGUIComponents();
        setPreferredSize(SIZE);
        setResizable(false);
        setTitle(Constants.APPLICATION_NAME);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
        secondsTimer.start();
    }



    private void initializeGUIComponents() {
        mainPanel = new JPanel(new GridBagLayout());

        clockLabel = new JLabel();
        updateClock();
        mainPanel.add(clockLabel, gbc.setXY(0, 0));

        newAlarmHourSpinner = new JSpinner();
        newAlarmHourSpinner.setModel(new CyclingSpinnerNumberModel(9, 1, 12, 1));
        DefaultEditor editor = new JSpinner.DefaultEditor(newAlarmHourSpinner);
        editor.getTextField().setColumns(2);
        editor.getTextField().setEditable(false);
        newAlarmHourSpinner.setEditor(editor);
        mainPanel.add(newAlarmHourSpinner, gbc.reset().setXY(0, 1));

        newAlarmMinuteSpinner = new JSpinner();
        SpinnerDateModel model = new SpinnerDateModel();
        model.setCalendarField(Calendar.MINUTE);
        newAlarmMinuteSpinner.setModel(model);
        DateEditor dateEditor = new JSpinner.DateEditor(newAlarmMinuteSpinner, "mm");
        editor.getTextField().setColumns(2);
        editor.getTextField().setEditable(false);
        newAlarmMinuteSpinner.setEditor(dateEditor);
        mainPanel.add(newAlarmMinuteSpinner, gbc.reset().setXY(1, 1));

        newAlarmAMPMSpinner = new JSpinner();
        newAlarmAMPMSpinner.setModel(new CyclingSpinnerListModel("AM", "PM"));
        editor = new JSpinner.DefaultEditor(newAlarmAMPMSpinner);
        editor.getTextField().setColumns(2);
        editor.getTextField().setEditable(false);
        newAlarmAMPMSpinner.setEditor(editor);
        mainPanel.add(newAlarmAMPMSpinner, gbc.reset().setXY(2, 1));

        add(mainPanel, gbc.reset().setXY(0, 0));
    }

    private void updateClock() {
        clockLabel.setText(Alarm.TIME_FORMAT.format(new Date()));
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        if(event.getSource() == secondsTimer) {
            updateClock();
        }
    }


}

确保您的GUI是在EDT上创建的

当我在上运行Swing教程中的SpinnerDemo代码并进行以下更改时,它可以正常工作:

    ftf = getTextField(spinner);
    ftf.setEditable(false);

然而,当我没有在EDT上创建GUI时,我的简单微调器测试程序也有问题。

Hm。。。是的,我也试过这样做。如何确保在特定时区创建GUI?EDT;看。@垃圾上帝啊,我明白了。我将GUI初始化扔到了一个
invokeLater
块中,它没有任何帮助。感谢您的澄清。@JeffGohlke,
我将GUI初始化抛到了invokeLater块中,但没有任何帮助。
-您下载了教程示例并试用了吗?张贴您的
SSCCE
,即使在EDT上正确创建帧和微调器,也可以演示问题。