この質問はヒープに返されている可能性がありますが、他の質問のボタンと違って、私のメニューバーを私のCardLayoutで操作しようとしています。私はこれに非常に長い間立ち往生してきました。枠を設定し、フレームに必要なパネルを追加 -CardLayoutを使って別のカードを表示するには?
私は現在
- CardLayoutクラスには、3つの別々のクラスが一緒に仕事を取得しようとしています。このクラスは、異なるカードを表示することも目的としています。
- MenuBarクラス - このクラスは、非常に最小限のメニューバーを設定します。これは、自分のCardLayoutクラスのフレームに追加します。私はここからメニュー項目を選んで、3番目のクラスのアクションリスナーを追加します。
- MenuActionListener - このクラスは、メニューバーからメニュー項目を選択したときに作成されるアクションイベントをリッスンする役割を果たします。特定のアイテムが選択されると、対応するカードが表示され、カードを切り替えるためにCardLayoutクラスに戻されます。
マイCardLayoutクラス:
public class CardLayoutExample {
private CardLayout cardLayout = new CardLayout(20, 20);
private JPanel contentPane = new JPanel(cardLayout);
private MyPanel panel1;
private MyPanel panel2;
private MyPanel panel3;
private void displayGUI()
{
MenuBar menuBar = new MenuBar();
JFrame frame = new JFrame("Card Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane.add(createPanel(Color.BLACK), "Panel 1");
contentPane.add(createPanel(Color.RED), "Panel 2");
frame.setContentPane(contentPane);
frame.setJMenuBar(menuBar.getMenuBar());
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public JPanel createPanel(Color color) {
JPanel panel = new JPanel();
panel.setBackground(color);
return panel;
}
public void redCard() {
System.out.println("Selected Red Item");
cardLayout.show(contentPane, "Panel 2");
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new CardLayoutExample().displayGUI();
}
});
}
}
MenuBarクラス:
public class MenuBar {
private JMenuBar menuBar;
private MenuActionListener mal;
public MenuBar() {
mal = new MenuActionListener();
System.out.println("menuBar");
//Creates a menubar for a JFrame
menuBar = new JMenuBar();
//Define and add drop down menu to the menubar
JMenu mainMenu = new JMenu("Main Menu");
menuBar.add(mainMenu);
//Define addMenu items
JMenuItem addRedItem = new JMenuItem("Red");
addRedItem.addActionListener(mal);
//Add main menu items/menu
mainMenu.add(addRedItem);
}
public JMenuBar getMenuBar()
{
return menuBar;
}
}
そして、私のMenuActionListenerクラス:
public class MenuActionListener implements ActionListener {
public void redActionPerformed() {
new CardLayoutExample().redCard();
}
@Override
public void actionPerformed(final ActionEvent e) {
String command = e.getActionCommand();
System.out.println(command);
switch (command) {
case "Red":
redActionPerformed();
break;
default:
}
}
}
私は私のメニューバーから赤のアイテムを選択し、次のコード行がトリガーされます。System.out.println("Selected Red Item")
、私の赤いパネルを表示するコードが実行されますが、カードはまったく変更されません。
私はカードを交換してメニューバーを手に入れようとしてきました。私が望むカードを適切に表示できるように、コードを修正するにはどうしたらいいですか?
ありがとうございます。
ああ、私は今見ています。この種のクラス統合を避けながら、クラスを利用してそれらを広げたいと思っていました。すべてのクラスを1つのメインクラスに入れ子にするのはちょっと面倒ですが、ネストされたクラスのドキュメントについて読むと、クラスが他のクラスと一緒に作業しているのは論理的な理由ですここに。 啓発をありがとう、私はこれを必ず取ることになります。 – juiceb0xk