12

ユーザーに名前を入力する必要があり、入力が行われるまで[OK]ボタンを無効にします。どうすれば無効にできますか...?

4

4 に答える 4

25

JOptionPaneコンポーネントをメッセージペインおよびその上に表示できるコントロール/オプションとして提供できます。

メッセージコンポーネントに正しいリスナーを追加すると、オプションとして使用されるコントロールに影響を与えることができるはずです。

JOptionPane.showOptionDialog(Component parentComponent 、Object message、String title、int optionType、int messageType、Icon icon、Object [] options、Object initialValue)を見てください。

更新しました

例えば...

ここに画像の説明を入力してください

public class TestOptionPane05 {

    public static void main(String[] args) {
        new TestOptionPane05();
    }

    protected JOptionPane getOptionPane(JComponent parent) {
        JOptionPane pane = null;
        if (!(parent instanceof JOptionPane)) {
            pane = getOptionPane((JComponent)parent.getParent());
        } else {
            pane = (JOptionPane) parent;
        }
        return pane;
    }

    public TestOptionPane05() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                final JButton okay = new JButton("Ok");
                okay.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JOptionPane pane = getOptionPane((JComponent)e.getSource());
                        pane.setValue(okay);
                    }
                });
                okay.setEnabled(false);
                final JButton cancel = new JButton("Cancel");
                cancel.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JOptionPane pane = getOptionPane((JComponent)e.getSource());
                        pane.setValue(cancel);
                    }
                });

                final JTextField field = new JTextField();
                field.getDocument().addDocumentListener(new DocumentListener() {
                    protected void update() {
                        okay.setEnabled(field.getText().length() > 0);
                    }

                    @Override
                    public void insertUpdate(DocumentEvent e) {
                        update();
                    }

                    @Override
                    public void removeUpdate(DocumentEvent e) {
                        update();
                    }

                    @Override
                    public void changedUpdate(DocumentEvent e) {
                        update();
                    }
                });

                JOptionPane.showOptionDialog(
                                null, 
                                field, 
                                "Get", 
                                JOptionPane.YES_NO_OPTION, 
                                JOptionPane.QUESTION_MESSAGE, 
                                null, 
                                new Object[]{okay, cancel}, 
                                okay);
            }
        });
    }
}
于 2013-01-15T09:56:02.043 に答える
1

私の知る限り、これはオーバーライドなしでは不可能JOptionPaneです。

于 2013-01-15T09:50:21.607 に答える
0

ユーザーが名前を入力する必要があり、何らかの入力が行われるまで [ok] ボタンを無効にしたいと考えています。

やり方が間違っています。

つまり、「名前とは何か」を定義する = 何でもかまいません。

つまり、実際にやろうとしているのは、空の文字列を受け入れないことです。

OKボタンが押された後、エラーチェックとしてそれを行います。

空の場合 - エラー メッセージのポップアップ/入力要求の繰り返し/キャンセルの確認/やりたいことは何でも

于 2013-01-15T10:15:25.013 に答える
0

Java 用のswinglabsまたはjGoodiesライブラリを検索してみてください。彼らはあなたが必要とするもののためにタイプを組み込みました。

于 2013-01-15T09:49:50.593 に答える