GridBagLayoutをグローバルに初期化してから、クラスコンストラクターでインスタンス化し、いくつかのボタンなどを追加しました。
事後にどうすれば追加できますか?単純なクラスはJFrameを拡張します。事後にclass.add(stuff、gridbagconstraints)を試すと(コンストラクターでadd(stuff、gribagconstraints)だけを使用)、何も起こらず、レイアウトに何も追加されません。
レイアウトマネージャーなどを「更新」する必要がありますか?グローバルに宣言されています。
更新:revalidate()を試しましたが、機能していないようです。概念実証用のテストボタンが配置されたコードの簡略版を次に示します。
public class MainGUI extends JPanel{
static GridBagConstraints c;
static MainGUI mainGUIclass;
static JFrame mainGUIframe;
public MainGUI() {
this.setLayout(new GridBagLayout());
c = new GridBagConstraints();
saveButton = new JButton("Save and Exit");
saveButton.setPreferredSize(new Dimension(200, 30));
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 4;
add(saveButton, c);
}
public static void main(String[] args) {
mainGUIframe = new JFrame("Message");
mainGUIframe.setSize(800,800);
mainGUIclass = new MainGUI();
mainGUIframe.add(mainGUIclass);
mainGUIframe.setVisible(true);
//now the addition
JButton newButton = new JButton("New Button");
newButton.setPreferredSize(new Dimension(200, 30));
c.gridx = 5;
c.gridy = 0;
c.gridwidth = 4;
mainGUIclass.add(newButton,c);
//none of this seems to work
mainGUIclass.revalidate();//?
mainGUIclass.repaint();//?
}
}
Update2:これは、Javaのpassbyvalueの性質と、レイアウトに追加しようとしている別のクラス(キャンバス)の問題のようです。解決策が見つかったら更新します。
Update3:これはスレッドの問題です。呼び出しているクラスがメインウィンドウをハングさせています。
編集:私は参照としてコードを提供し、それ自体で簡単にコンパイルするのではなく、完全な全体像を提供するために完全にしようとしました。あなたの援助を提供してくれたすべての人に感謝します。
Update4:成功!彼らの重要な点は、メディアプレーヤークラスが「isDisplayable()」チェックを実行したことです。これにより、追加されたフレームがgridbaglayoutに追加されなかった場合、プログラムがハングしました。(JInternalFramesの)値による一連の不幸な見た目の通過、gridbaglayoutへの内部フレームの事前追加、および別のメソッドからのメディアのリモート開始により、私が探しているものが機能します。