2015-05-14 5 views
4

Я использую 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); 

     } 
    }); 
    } 
} 
+0

Вы должны вызвать 'SetVisible (истина)' после добавления всех компонентов. Кроме того, вызовите 'pack()' вместо 'setSize' после добавления всего и перед отображением. – user1803551

+0

Текстовое поле используется для ввода. Если вы не хотите, чтобы оно редактировалось, используйте 'JLabel' вместо этого, чтобы отобразить информацию. В противном случае вы можете вызвать 'setEditable (false)'. – user1803551

ответ

8

Один подход, чтобы вызвать setEditable(false) на выбирающий-х IDateEditor, JTextFieldDateEditor.

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

Это позволяет новую дату, чтобы быть выбраны, в то время как запрещая изменения с помощью самого JTextField:

set editable false

В качестве альтернативы, chooser.setEnabled(false), имеет эффект отключающийJDateChooser полностью.

set enabled false

+1

Ну, это именно то, что я хотел, позвольте мне сказать спасибо. – JWizard

+1

Не работает –

+0

@MadhukaDilhan: Благодарим за комментарий; в то время как любой из подходов работает, я обновляю ответ, чтобы уточнить разницу. – trashgod

3

В качестве альтернативы, попробуйте этот код, который отключает JDateChooser полностью:

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

image

+0

Это действительная альтернатива, но она имеет другой эффект, проиллюстрированный [здесь] (http://stackoverflow.com/a/30240464/230513). – trashgod