我们如何禁用JDateChooser上的编辑选项?

时间:2015-05-14 10:37:01

标签: java swing validation jcalendar jdatechooser

我使用JDateChooser来允许用户输入日期。如何在出现的文本字段上禁用编辑选项?我不希望用户在该文本字段中键入任何内容 - 只能通过单击日历输入输入。我如何实现这一目标?

以下是我的代码:

public class PQReport {
// product quotations report

public JPanel panel;

public PQReport() {
    panel = new JPanel();
    panel.setPreferredSize(new Dimension(125, 300));
    initUI();

}

public void initUI() {
    panel.setLayout(new net.miginfocom.swing.MigLayout());
    JDateChooser chooser = new JDateChooser();
    chooser.setLocale(Locale.US);
    //chooser.isEditable(false);
    chooser.setDateFormatString("yyyy-MM-dd");
    panel.add(new JLabel("Date of Birth:"));
    panel.add(chooser);
    panel.add(new JButton("click"));
}

public static void main(String[] args) {

    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            PQReport rep = new PQReport();
            JFrame f = new JFrame();
            f.setSize(400, 400);
            f.setVisible(true);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(rep.panel);

        }
    });
    }
 }

3 个答案:

答案 0 :(得分:10)

一种方法是在选择器setEditable(false)IDateEditor上调用JTextFieldDateEditor

JDateChooser chooser = new JDateChooser();
JTextFieldDateEditor editor = (JTextFieldDateEditor) chooser.getDateEditor();
editor.setEditable(false);

这允许选择新日期,同时通过JTextField本身禁止更改:

set editable false

备选方案chooser.setEnabled(false)具有完全禁用 {/ 1}}的效果。

set enabled false

答案 1 :(得分:3)

或者,尝试使用此代码完全禁用JDateChooser

JDateChooser chooser = new JDateChooser();
chooser.setEnabled(false);

image

答案 2 :(得分:0)

您必须输入:

editor.setEnabled(false);

代替:

editor.setEditable(false);

所以正确的代码是(我已经测试过):

JDateChooser chooser = new JDateChooser();
JTextFieldDateEditor editor = (JTextFieldDateEditor) chooser.getDateEditor();
editor.setEnabled(false);