java - CardLayout,在 JFrame 或 JPanel 中?

标签 java swing jpanel jbutton cardlayout

我必须为学校制作一个游戏,我在通过单击 JButton 切换 JPanels 时遇到了一些麻烦。我想使用 CardLayout,但我是 Java 的新手,这使它变得非常困难。我的目标是让我所有的面板都在不同的类中,比如“面板 1”类、“面板 2”类等(而不是在我的主(JFrame)类中创建我的 JPanel,所以我的代码更容易阅读。是吗?可以将你的 CardLayout 容器放在包含我的 JFrame 的类中吗?还有,我应该把那个该死的 ActionPerformed 放在哪里?这是我的代码,希望你们能帮助我!

主要(JFrame)类

    package invers;

    import java.awt.CardLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;

    public class InversMain extends JFrame implements ActionListener

     {

public CardLayout cardlayout;
public Container contentPane = this.getContentPane();
public InversMain()
{


JFrame frame = new JFrame();
frame.setLayout(cardlayout);
frame.setSize(1366,768);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Invers");
frame.setResizable(true);
frame.setVisible(true);

contentPane.setPreferredSize(new Dimension(600, 400));
    contentPane.add(new InversMainPaneel(), "Panel 1");
    contentPane.add(new InstellingenPaneel(), "Panel 2");

    settingsButton.addActionListener(new ActionListener() {

    public void actionPerformed(ActionEvent e) {
        cardlayout.show(contentPane, "Panel 1");
    }
});}


public static void main ( String [] args)
{
    new InversMain();
}
}

请注意,settingsButton 是我在 PANEL 1 类中的按钮。因为它不是在我的主类中创建的,所以会报错。我想从我的主类中引用 PANEL 1 类中的 settingsButton。这可能吗?

面板 1,包含我的按钮的面板,这是我的主菜单页面

    package invers;

    import java.awt.Color;
    import java.awt.Font;
    import javax.swing.JButton;
    import javax.swing.JPanel;

    public class InversMainPaneel extends JPanel

    {

private JButton nieuwSpelKnop = new JButton("Nieuw spel");
private JButton laadSpelKnop = new JButton("Laad Spel");
private JButton settingsButton = new JButton("Settings");
private JButton handleidingKnop = new JButton("Handleiding");

public InversMainPaneel()
{

    this.setLayout(null);

    nieuwSpelKnop.setSize(300,40);
    nieuwSpelKnop.setFont(new Font("Arial", Font.BOLD, 25));
    nieuwSpelKnop.setLocation(520,250);
    nieuwSpelKnop.setVisible(true);


    laadSpelKnop.setSize(300,40);
    laadSpelKnop.setFont(new Font("Arial", Font.BOLD, 25));
    laadSpelKnop.setLocation(520,350);
    laadSpelKnop.setVisible(true);

    settingsButton.setSize(300,40);
    settingsButton.setFont(new Font("Arial", Font.BOLD, 25));
    settingsButton.setLocation(520,450);
    settingsButton.setVisible(true);

    handleidingKnop.setSize(300,40);
    handleidingKnop.setFont(new Font("Arial", Font.BOLD, 25));
    handleidingKnop.setLocation(520,550);
    handleidingKnop.setVisible(true);


    this.add(nieuwSpelKnop);
    this.add(laadSpelKnop);
    this.add(settingsButton);
    this.add(handleidingKnop);

    this.setBackground(new Color(178,143,79));
}
    }
    }

面板 2,用于测试卡片布局是否有效

    package invers;
    import java.awt.Color;
    import javax.swing.JPanel;

    public class InstellingenPaneel extends JPanel
    {
public InstellingenPaneel()
{
    this.setBackground(new Color(178,143,79));
}
    }

最佳答案

您是否尝试过使用 setContentPane 方法设置 JFrame 内容 Pane ?

因为我可以看到你声明了 JFrame 和一个 contentpane 对象,但没有设置它,或者用你的面板设置它。

关于java - CardLayout,在 JFrame 或 JPanel 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16150259/

相关文章:

java - 日期转换无法正常工作

java - Apache Crunch 管道如何生成 map reduce 作业?

java - JTable - 将多维数组加载到表中

java - 如何使用 swing 制作更好更快的挂钟?

java - 如何在鼠标位置添加面板?

Java日历: How to move calendar to next month using JButton?

java - 将图像添加到扑克牌中 - JAVA

java - 打开另一个窗口时将 JFrame 变黑

java - 单击按钮后如何在面板中显示信息?

java - 避免将参数从高级类传递到低级类