[Java]在Dialog中當用戶輸入錯誤的數據時按下確認鍵也不會關閉Dialog(OK or YES) 當用戶輸入錯誤的數據時不準按下確認鍵(OK or YES)

當用戶輸入錯誤的數據時不準按下確認鍵(OK or YES)

問題研究

創建一個Dialog,簡單方法有

  1. 通過JOptionPanel 的靜態方法創建對話框
  2. 創建一個JOptionPanel 對象,傳遞一個JPanel 對象
  3. 直接繼承JDialog對象。

1和2用戶都不可以操作按鈕,所以方法只有第三個。

過程

  1. 新建一個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 不是的,不過在事件中需要這個),那就添加事件吧,比如下面這樣

  2. 添加事件

        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) 關閉對話框。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章