があり、JMenu
これJMenuItem
をクリックすると、 または ウィンドウを開く必要がありJFrame
ます。つまり、内部JButton
に , JTextField
,...
これどうやってするの ?
JFrame
最初の を作成したのと同じ方法で を作成しJFrame
、呼び出すことができます
setVisible(true);
メニューをクリックしたときに表示されるようにしますActionListener
。JMenuItem
モーダルにしたい場合 (新しいウィンドウを閉じないと元のフレームにアクセスできない)、JDialog
代わりにを使用するmodal
か、コンストラクターで true に設定するか、 を呼び出しsetModal(true)
ます。
「ポップアップ」と「ウィンドウ」を混同しています。
通常、オブジェクトを右クリックすると、ポップアップが表示されます。ポップアップには、そのオブジェクトに対して実行できるアクションのリストが表示されます。たとえば、テキスト フィールドには「切り取り」、「コピー」、および「貼り付け」が含まれる場合があります。詳細については、「ポップアップ メニューの表示」に関する Swing チュートリアルのセクションを参照してください。
ウィンドウは、JFrame または JDialog で他の Swing コンポーネントを表示するために使用されます。
このアクションをメニュー項目から呼び出していることを考えると、JFrame やポップアップではなく、モーダル JDialog を作成して表示する必要があると思います。
また、チュートリアルを読みながら、「Using Layout Managers」のセクションを読んでください。null レイアウトを使用することは、ダイアログを作成する最良の方法ではありません。
私は良いコードビューのために答えを書いています:
JFrame を使用すると、「java.lang.IllegalArgumentException: コンテナーにウィンドウを追加しています」というエラーが発生しました。
それはactionPerformedメソッドの私のコードです:
PopupFactory factory = PopupFactory.getSharedInstance();
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setBounds(428, 99, 185, 155);
final JButton button = new JButton();
button.setText("Button");
button.setBounds(10, 93, 111, 25);
frame.getContentPane().add(button);
final Popup popup = factory.getPopup(null, frame, 200, 200);
popup.show();