show()
ウィンドウを表示するためにメソッドが呼び出されるたびにメソッドを呼び出すことができるリスナーを設定する必要があります。これどうやってするの?
質問する
6544 次
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 に答える