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

Java 如何禁用JDateChooser上的编辑选项?,java,swing,validation,jcalendar,jdatechooser,Java,Swing,Validation,Jcalendar,Jdatechooser,我使用JDateChooser允许用户输入日期。如何禁用显示的文本字段上的编辑选项?我不希望用户在该文本字段中键入任何内容-只能通过从日历中单击来输入。我如何做到这一点 下面是我的代码: public class PQReport { // product quotations report public JPanel panel; public PQReport() { panel = new JPanel(); panel.setPreferredSize(new Dim

我使用
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);

        }
    });
    }
 }

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

JDateChooser chooser = new JDateChooser();
JTextFieldDateEditor editor = (JTextFieldDateEditor) chooser.getDateEditor();
editor.setEditable(false);
这允许选择新日期,同时禁止通过
JTextField
本身进行更改:

另一种选择,
chooser.setEnabled(false)
,可以完全禁用
JDateChooser


或者,尝试完全禁用
JDateChooser
的代码:

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

您必须:

editor.setEnabled(false);
而不是:

editor.setEditable(false);
所以正确的代码是(我测试了它):


添加所有组件后,必须调用
setVisible(true)
。另外,在添加所有内容之后和显示之前,请调用
pack()
,而不是
setSize
。文本字段用于输入。如果不希望其可编辑,请使用
JLabel
来显示信息。否则,您可以调用
setEditable(false)
@MadhukaDilhan:感谢您的评论;虽然这两种方法都有效,但我已经更新了答案以澄清差异。它已禁用,但使用选择器可以选择date@MadhukaDilhan:正确;如果残疾状态是可接受的,您的选择是一个很好的选择;我推断Giovanrich希望排除编辑文本,而不是更改日期。当使用chooser.setEnabled(false)禁用chooser时,它是可以的。但是在chooser.setEnabled(true)之后它不会启用。setEnabled(true)…对我有效;如果你有问题,就发一个问题。这是一个有效的选择,但效果不同,如图所示。
JDateChooser chooser = new JDateChooser();
JTextFieldDateEditor editor = (JTextFieldDateEditor) chooser.getDateEditor();
editor.setEnabled(false);