2

次のように親に追加ComponentListenerしました:JTextField

parent.addComponentListener(new ComponentAdapter() {
    @Override
    public void componentHidden(ComponentEvent e) {
        setText("");
    }
});

したがって、親が非表示になった後、textFieldテキストは "" に設定されます。すべてが機能しますが、親を可視に設定すると問題が発生します。数ミリ秒間、前のテキストtextFieldが表示され、フィールドが空になります。だからあんまりよろしくないな..

4

1 に答える 1

1

親を非表示に設定する前に、textFieldフィールドが設定されますtextField.setText(null);(再描画する必要はありません)。その後、問題はフォーカスにあります..のような初期コンポーネントに設定する必要がありますpanel.requestFocusInWindow();. しかし、焦点は常に適切なタイミングで設定されるとは限りません。したがってTimer、クラスは問題を解決しました:

textField.setText(null);
panel.requestFocusInWindow();

final int timeout = 5;
        Timer timer = new Timer(timeout, new ActionListener() {
            int a = 0;

            @Override
            public void actionPerformed(ActionEvent e) {
                if (panel.isFocusOwner() || a > 500) {
                    EventQueue.invokeLater(new Runnable() {
                        @Override
                        public void run() {
                            setVisible(false);
                        }
                    });
                    ((Timer) e.getSource()).stop();
                }
                a += timeout;
            }
        });
        timer.setRepeats(true);
        timer.start();

ダイアログ ウィンドウ (親)setVisible(true);が新しく作成されたものとして表示されるようになりました。ついに.. :)

于 2013-08-21T23:40:19.710 に答える