當用戶輸入錯誤的數據時不準按下確認鍵(OK or YES)
問題研究
創建一個Dialog,簡單方法有
- 通過JOptionPanel 的靜態方法創建對話框
- 創建一個JOptionPanel 對象,傳遞一個JPanel 對象
- 直接繼承JDialog對象。
1和2用戶都不可以操作按鈕,所以方法只有第三個。
過程
-
新建一個Dialog,通過eclipse,這樣大部分的代碼都可以自動生成。結果是這樣的
/** * Create the dialog. */ public T1() { setBounds(100, 100, 450, 300); getContentPane().setLayout(new BorderLayout()); contentPanel.setLayout(new FlowLayout()); contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5)); getContentPane().add(contentPanel, BorderLayout.CENTER); { JPanel buttonPane = new JPanel(); buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT)); getContentPane().add(buttonPane, BorderLayout.SOUTH); { JButton okButton = new JButton("OK"); okButton.setActionCommand("OK"); buttonPane.add(okButton); getRootPane().setDefaultButton(okButton); } { JButton cancelButton = new JButton("Cancel"); cancelButton.setActionCommand("Cancel"); buttonPane.add(cancelButton); } } }
T1 是類名,僅截取了構造函數。
看兩個按鈕的創建的部分,並沒有添加事件(那個setActionCommand 不是的,不過在事件中需要這個),那就添加事件吧,比如下面這樣 -
添加事件
okButton.addActionListener(this);
與
cancelButton.addActionListener(this);
與
private int value; @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("OK")) { if (valid()) { return; } value = JOptionPane.OK_OPTION; } else { value = JOptionPane.CANCEL_OPTION; } setVisible(false); }
獲得按鈕的
actionCommand
,如果是OK
,就進行判斷,如果不通過就什麼都不作(如果是以前此時也會關閉對話框,只能後續在通知用戶輸入的數據是錯誤的)。這個
valid()
函數需要根據需要自由實現,用value
存儲結果,然後調用setVisible(false)
關閉對話框。