テストの理由として、パネルとそのメインアプリケーションフレームの内容でJDialogウィンドウを開こうとしました。私はすでにそこに何かを持っていたので、JDialogs contentPaneを単純に私が渡したものに設定できるかどうかを見たいと思っていました。だから、simplyfied形で、これは一緒に来た:JFrameとJDialogの間にコンテナを渡すとパネルが欠落しますか?
testsforSO.java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class testsforSO extends JFrame {
private static final long serialVersionUID = -3890178393751567629L;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
testsforSO frame = new testsforSO();
frame.setSize(300, 300);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public testsforSO() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("I am the Frame");
getContentPane().setLayout(new BorderLayout(0, 0));
JPanel panel = new JPanel();
panel.setLayout(null);
JButton btnRestart = new JButton("Restart");
btnRestart.setBounds(10, 10, 50, 50);
btnRestart.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
testsforSO.main(null);
dispose();
}
});
panel.add(btnRestart);
getContentPane().add(panel);
repaint();
// -----------DELETE These comments-------------
// JDialog myDialg = new JDialog(this);
// myDialg.setContentPane(panel);
// myDialg.setVisible(true);
// myDialg.setSize(300,300);
// myDialg.setLocation(new Point(250, 250));
// myDialg.setTitle("I am Dialog from within the script");
myDialog.main(panel);
}
}
とmyDialog.java:
import java.awt.Container;
import java.awt.EventQueue;
import javax.swing.JDialog;
public class myDialog extends JDialog {
private static final long serialVersionUID = 7079322237622743228L;
public static void main(Container myContainer) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
myDialog frame = new myDialog(myContainer);
frame.setVisible(true);
frame.setContentPane(myContainer);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public myDialog(Container myContainer) {
setContentPane(myContainer);
getContentPane().setLayout(null);
setBounds(200,200,200,200);
}
}
私はそれが同様に再起動ボタンを含んでいるでしょう仮定のメインフレームを開始ダイアログが行うように。しかし興味深いことに、それはボタン付きのダイアログだけでした。
しかし、それを押すと、メインフレームが適切に再開され、2番目のダイアログが設定され、ボタンが再び含まれていました。今回はメインフレームにもボタンがありましたが、何の機能もありませんでした。それをクリックすることは絶対に何もしません。
次に、メインアプリケーションコード(コメント行を参照)にダイアログを直接追加し、アプリケーションを再起動すると、そのクラスのダイアログだけがボタンを表示した場合、その動作が変わるかどうかを確認しました。これを打つことさえも正しく再開されましたが、孤独な宣言されたダイアログ以外の他のウィンドウにはボタンは表示されません。
私はここで何が間違っていますか?また、このようにしてもコードが正しく動作するようにはどうすればできますか?
です。早速のご返事ありがとうございます!だから、 'public Container panelFactory(){/ * make and return Container * /}のようなもので、新しいものを取得したいときに呼び出すでしょう...フレームに表示されているこのボタンは本当に私を混乱させました。 – geisterfurz007
@ geisterfurz007:それはJFrame内にあっただけですが、それは見ただけですが、ダイアログを作成した後にJFrameを再ペイントすると、消えてしまう可能性があります。たとえば、コードを実行すると、ダイアログのボタンを押すと、JFrameのボタンがすばやく表示されます。 –
@ geisterfurz007:サイドの問題:あなたがしているときにメインメソッドを呼び出すコードもないでしょう。 –