java在一个类中使用JButton更改另一个类中的卡片(使用CardLayout)
我构建了一个GUI,在其中我使用不同的类扩展面板将几个JPanel
组件相互嵌套。在我的Menue
中,我有一个CenterPanel
和一个ButtonPanel
。ButtonPanel
包含实现ActionListener
接口的按钮。CenterPanel
使用CardLayout
,我想使用上述按钮来更改CenterPanel
中的卡。问题是,按钮对CenterPanel
或面板中的卡一无所知
我不想把所有的东西都放在一节课上,但是我不知道如果不在一节课上写下所有的东西,怎么解决这个问题
以下是我的一些代码:
MenuePanel
public class MenuePanel extends JPanel{
JButton startButton;
JButton exitButton;
JButton anleitungButton;
ButtonPanel buttonPanel;
TitlePanel titlePanel;
JPanel centerPanel;
CardLayout cardLayout;
TextPanel anleitungPanel;
TextPanel gameOverPanel;
TextPanel gameWonPanel;
TextPanel nextLevelPanel;
StartPanel startPanel;
public MenuePanel() {
super();
cardLayout = new CardLayout();
setBackground(Color.CYAN);
setBounds(0,0,800,600);
setLayout(new BorderLayout());
titlePanel = new TitlePanel();
add(titlePanel, BorderLayout.PAGE_START);
startPanel = new StartPanel();
gameOverPanel = new TextPanel("Game Over!");
gameWonPanel = new TextPanel("Game Won!");
anleitungPanel = new TextPanel();
nextLevelPanel = new TextPanel("Next Level!");
centerPanel = new JPanel();
centerPanel.setLayout(cardLayout);
add(centerPanel, BorderLayout.CENTER);
centerPanel.add(startPanel, "1");
centerPanel.add(gameOverPanel, "2");
centerPanel.add(gameWonPanel, "3");
centerPanel.add(anleitungPanel, "4");
centerPanel.add(nextLevelPanel, "5");
cardLayout.show(centerPanel, "2");
buttonPanel = new ButtonPanel();
add(buttonPanel, BorderLayout.PAGE_END);
setVisible(true);
}
ButtonPanel
public class ButtonPanel extends JPanel{
JButton startButton;
JButton exitButton;
JButton anleitungButton;
public ButtonPanel() {
super();
setLayout(new FlowLayout());
setPreferredSize(new Dimension(800, 100));
setBackground(Color.CYAN);
startButton = new JButton("start)");
startButton.setPreferredSize(new Dimension(150,50));
add(startButton);
anleitungButton = new JButton("anleitung");
anleitungButton.setPreferredSize(new Dimension(150,50));
add(anleitungButton);
exitButton = new JButton("exit");
exitButton.setPreferredSize(new Dimension(150,50));
add(exitButton);
CloseListener closeListener = new CloseListener();
StartListener startListener = new StartListener();
AnleitungListener anleitungListener = new AnleitungListener();
startButton.addActionListener(startListener);
anleitungButton.addActionListener(anleitungListener);
exitButton.addActionListener(closeListener);
}
TextPanel
public class TextPanel extends JPanel{
JLabel text;
public TextPanel(String panel) {
super();
text = new JLabel(panel, SwingConstants.CENTER);
setPreferredSize(new Dimension(800, 400));
text.setFont(new Font("Arial", Font.ITALIC, 75));
add(text);
}
AnleitungListener
public class AnleitungListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
}
我是不是做错了,需要改变整个架构?如果,怎么做?关于如何使用ActionListeners的大多数示例要么是在一个类中编写的,要么是以复杂的方式让我理解
# 1 楼答案
您可以在两者之间创建一个类来协调整个切换,以防止在类之间共享大量实例。我已经创建了一个使用CardSwitcher的例子,它可以做到这一点
如果你觉得有用,请告诉我