メソッドを使用してPopup
を作成します。ドキュメントによると、私はそれがもはや必要でないときにポップアップでhide()
メソッドを呼び出す必要があります。コンポーネントの除去を検出します。
私のアプリケーションでは、ポップアップはJLabel
の子であり、さまざまな状況で現在のフレームから削除される可能性があります。 (JLabel
自体またはその親コンテナの1つが削除されます)その代わりに、すべての場所でhide()
を呼び出して(Popup
オブジェクトを利用可能にする)、JLabel
または1の削除を検出できるようにすることをお勧めします親コンテナの
削除はどのように検出できますか?私は素朴に、コンポーネントの削除は子供の削除/隠れを意味すると仮定していましたが、以下のコードが示しているように、ポップアップはJLabel
の削除後も存続します。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Xyzzy extends JFrame {
static Xyzzy frame;
static JPanel panel;
static JLabel text1;
static JLabel text2;
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame = new Xyzzy();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));
panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
frame.add(panel);
text1 = new JLabel("text1");
text2 = new JLabel("text2");
panel.add(text1);
frame.add(new JButton(new AbstractAction("Add popup") {
public void actionPerformed(ActionEvent e) {
PopupFactory factory = PopupFactory.getSharedInstance();
Popup popup = factory.getPopup(text1, new JLabel("POPUP"),frame.getX()+300,frame.getY()+300);
popup.show();
}
}));
frame.add(new JButton(new AbstractAction("New label") {
public void actionPerformed(ActionEvent e) {
panel.remove(text1);
panel.add(text2);
panel.revalidate();
}
}));
frame.setSize(600, 600);
frame.setVisible(true);
}
});
}
}
このコードでは、テキスト「text1」と2つのボタンを表示するJFrame
が作成されます。 「ポップアップを追加」と表示されたボタンを押すと、ウィンドウに「POPUP」というテキストのポップアップが表示されます。このポップアップは、text1
の子です。 "New label"ボタンを押すと、 "text1"がディスプレイから削除されますが、Popupは存続します。
text1
またはそれが含まれているpanel
が削除されたときに、私がポップアップを隠すことができるようにする必要があります。実際のremove()
メソッドが呼び出された場所にコードを追加しないでください。
は、ピーター、ありがとうございました。それはうまく動作します! – oz1cz