JPanel
があります。これはマウスのクリックに応答してからJDialog
を開きます。 JDialog
のコンストラクタではJPanel
ではなくJFrame
のインスタンスが必要です。これを回避するにはどうすればよいですか?JPanelからJDialogをインスタンス化する
答えて
引数を必要としないコンストラクタがあります:
JDialog dialog = new JDialog();
何がしたいことは、ダイアログモーダルにするのであれば、多分あなたはあなたのメインのJFrameの静的参照を取得することができ、のようなもの:
は、JDialog dialog = new JDialog(MyMainJFrame.getInstance());
パラメータのないコンストラクタを使用すると、ダイアログはオーナーなしになります。私は、あなたのパネルを所有するFrameをダイアログの所有者にするのが最善の方法だと考えています。
これは、JPanelのgetParent()を使用して所有者を見つけ、このオブジェクトをJFrameの所有者として送信する必要があることを意味します。
そのため、粗コードは、私はこのコードをテストしていない
java.awt.Container c = myPanel.getParent();
while (!(c instanceof javax.swing.JFrame) && (c!=null)) {
c = c.getParent();
}
if (c!=null) {
JFrame owner=(javax.swing.JFrame) c;
JDialog myDialog=new JDialog(owner);
}
だろうが、あなたのアイデアを理解するためにenought良いです。
JOptionPaneを使用することに決めた場合、mouseAdapter内部クラスを使用してMouseListenerをJPanelに追加して、mouseClickedイベントを処理できます。内部クラスからパネルにアクセスするには、最終パネルを宣言する必要があります。
final JPanel testPanel = new JPanel();
testPanel.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
JOptionPane.showMessageDialog(testPanel,"Title","InformationMessage",JOptionPane.INFORMATION_MESSAGE);
}});//end of mouseClicked method
あなたは本当にあなたがしたい場合は特に、それはモーダル(親ウィンドウを渡すことで、ダイアログがあなたのウィンドウに添付されますと、親をもたらすこともたらす、親ダイアログまたはフレームに使って、JDialogを添付するようにしてください子ダイアログも同様)。そうでなければ、ユーザ体験は本当に間違って行くことができます。
JPanel panel = new JPanel();
Window parentWindow = SwingUtilities.windowForComponent(panel);
// or pass 'this' if you are inside the panel
Frame parentFrame = null;
if (parentWindow instanceof Frame) {
parentFrame = (Frame)parentWindow;
}
JDialog dialog = new JDialog(parentFrame);
...
:失われたダイアログを、等...
があなたのJPanelの親ウィンドウを見つけるには、モーダルダイアログを表示せずにウィンドウをブロックし、あなたが必要なのは、このコードですフレームまたはダイアログにいるかどうかわからない場合は、両方のクラスの "instanceof"テストを行います。
- 1. JTabbedPaneのJPanel上のJDialog
- 2. JDialogまたはJPanelに最小化/最大化ボタンを追加するには
- 3. java - JDialogでJPanelで実行されたアクションを検出
- 4. クラス・タイプからクラスをインスタンス化する
- 5. JFrameを開く難読化JDialog
- 6. GUIでJPanelを再有効化する
- 7. AS3/OpenLaszlo内からFlexアプリケーションをインスタンス化
- 8. セッションクッキーからASP.NETセッションをインスタンス化
- 9. JFrameからJPanelを削除する
- 10. テンプレート内の指定されたインスタンスからモデルフォームをインスタンス化する
- 11. Python:クラスのリストからクラスの新しいインスタンスをインスタンス化する
- 12. JDialogからアイコンを完全に削除する方法は?
- 13. 親クラスから正しいサブクラスをインスタンス化する
- 14. xibからビューをインスタンス化する方法は?
- 15. Android:Android forcingでリフレクトからJNDIファクトリをインスタンス化するjavax
- 16. モデルから直接クエリビルダをインスタンス化する
- 17. TabControlからContentTemplateのインスタンス化されたUIElementを取得する
- 18. 文字列からC#でクラスをインスタンス化する
- 19. クラスからImageViewをインスタンス化する方法は?
- 20. フォーム入力からドメインオブジェクトをインスタンス化する
- 21. ActionScript 3で文字列からクラスをインスタンス化する
- 22. AS3 - iOSの外部.swfからオブジェクトをインスタンス化する
- 23. Backbone.js - 既存のHTMLからモデル/ビューをインスタンス化する
- 24. メニューハンドラからパーツクラスを再インスタンス化する方法は?
- 25. 文字列内のクラス名からCoffeeScriptクラスをインスタンス化する
- 26. JLabelからJPanelへドラッグアンドドロップ
- 27. COMオブジェクトはあるプログラムからインスタンス化されますが、同じユーザーで実行されている別のインスタンスからインスタンス化されません
- 28. Swift - 関数から返された型からクラスをインスタンス化する
- 29. Javabeanをインスタンス化する
- 30. インターフェイスをインスタンス化するエラー
JOptionPaneの使用を検討しましたか? – ChadNC