状態変数を変更した後にパネルコンテンツを更新する方法を見つけようとしています。フレーム状態変数を使用してJFrameでJPanelコンテンツを更新する
具体的には、以下の例では、JFrame内に2つのボタンを持つJPanelがあります。アプリケーションが起動すると、その状態変数( "window")は "home"に等しいので、ホームボタンは見えないはずです。ページボタンをクリックすると、状態変数が変化し、フレームの再描画後に両方のボタンの可視性が変化するはずです。 (つまり、ページボタンが消え、ホームボタンが表示されます)。
この場合、ボタンにsetVisibility()メソッドを使用するだけで状態変数を使わずに解決することができます。しかし、私のアプリでは、もっと多くのJComponetnsを状態変数に接続したいと思っています。それを行う方法がありますか?
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class JPanelUpdateTest {
private JFrame frame;
private String window = "home";
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
JPanelUpdateTest window = new JPanelUpdateTest();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public JPanelUpdateTest() {
initialize();
}
private void initialize() {
frame = new JFrame("JPanelUpdateTest");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.CENTER);
JButton btnHome = new JButton("home");
btnHome.setVisible(window == "home" ? false : true);
btnHome.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
window = "page";
panel.revalidate();
frame.repaint();
}
});
panel.add(btnHome);
JButton btnPage = new JButton("page");
btnPage.setVisible(window == "page" ? false : true);
btnPage.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
window = "home";
panel.revalidate();
frame.repaint();
}
});
panel.add(btnPage);
}
}
ありがとうございました。今、私は参照してください...メソッドで編集するためにクラス定数としてコンポーネントを設定する場合、それは動作します。それは多くの定数を意味するので、代わりにCardLayoutを試してみます。 equals()もありがとう。ほんとうにありがとう。 – Jakub