0

show()ウィンドウを表示するためにメソッドが呼び出されるたびにメソッドを呼び出すことができるリスナーを設定する必要があります。これどうやってするの?

4

3 に答える 3

7

あなたはおそらく に興味があるでしょうWindowListener

チュートリアル「ウィンドウ リスナーの作成方法」から:

次のウィンドウ アクティビティまたは状態は、ウィンドウ イベントの前に発生する可能性があります。

  • ウィンドウを開く — 初めてウィンドウを表示します。
  • ウィンドウを閉じる — 画面からウィンドウを削除します。
  • ウィンドウのアイコン化 — ウィンドウをデスクトップ上のアイコンに縮小します。
  • ウィンドウの非アイコン化 — ウィンドウを元のサイズに復元します。
  • フォーカスされたウィンドウ — 「フォーカス オーナー」を含むウィンドウ。
  • アクティブ化されたウィンドウ (フレームまたはダイアログ) — このウィンドウは、フォーカスされたウィンドウであるか、フォーカスされたウィンドウを所有しています。
  • 非アクティブ化されたウィンドウ — このウィンドウはフォーカスを失いました。フォーカスの詳細については、AWT フォーカス サブシステムの仕様を参照してください。

それらすべてを実装する必要がない場合はWindowAdapter、次のように a を使用できます。

myFrame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowOpened(WindowEvent we) {
        System.out.println("this window was opened for the first time");
    }

    @Override
    public void windowActivated(WindowEvent we) {
        System.out.println("this window or a subframe was focused");
    }
});
于 2013-03-18T04:48:56.667 に答える
3

を追加しComponentListenerて、イベントを確認しcomponentShownます。aはウィンドウが最初に開かれたときWindowListenerにのみ起動し、毎回起動することに注意してください。 ComponentListener

詳細については、コンポーネントリスナーの作成方法を参照してください。

このソースは、2つのリスナーを示しています。

import java.awt.*;
import java.awt.event.*;
import java.util.logging.*;
import javax.swing.*;
import javax.swing.event.*;

class DetectVisibility {

    public static void main(String[] args) {
        Runnable r = new Runnable() {

            @Override
            public void run() {
                JPanel gui = new JPanel(new BorderLayout());
                final Logger log = Logger.getAnonymousLogger();

                ComponentListener cl = new ComponentListener() {

                    @Override
                    public void componentResized(ComponentEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void componentMoved(ComponentEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void componentShown(ComponentEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void componentHidden(ComponentEvent e) {
                        log.log(Level.INFO, e.toString());
                    }
                };

                WindowListener we = new WindowListener() {

                    @Override
                    public void windowOpened(WindowEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void windowClosing(WindowEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void windowClosed(WindowEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void windowIconified(WindowEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void windowDeiconified(WindowEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void windowActivated(WindowEvent e) {
                        log.log(Level.INFO, e.toString());
                    }

                    @Override
                    public void windowDeactivated(WindowEvent e) {
                        log.log(Level.INFO, e.toString());
                    }
                };

                final JWindow w = new JWindow();
                w.setSize(100,100);
                w.setLocation(10,10);
                w.addComponentListener(cl);
                w.addWindowListener(we);

                final JCheckBox show = new JCheckBox("Show Window");
                ChangeListener chl = new ChangeListener() {

                    @Override
                    public void stateChanged(ChangeEvent e) {
                        w.setVisible(show.isSelected());
                    }
                };
                show.addChangeListener(chl);
                gui.add(show);

                JOptionPane.showMessageDialog(null, gui);
            }
        };
        // Swing GUIs should be created and updated on the EDT
        // http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
        SwingUtilities.invokeLater(r);
    }
}
于 2013-03-18T05:43:17.383 に答える
2

WindowListenerというインターフェイスがあり、ウィンドウが開いたときに発生するイベントがあります。最初のリンクですべてのイベントを見つけることができます。

編集 :

WindowListener は 1 回だけ機能します。@Andrew Thompson の投稿によると、ComponentListener を使用する必要があります。確かにベストアンサー

于 2013-03-18T04:48:59.767 に答える