具体:Java 中的卡片布局
Specific :Card Layout In Java
我有一个简短的问题,我相信很快就能得到答案,但尽管我尽力了,但还是无法弄清楚。
所以我正在编写一个游戏代码,我需要在不同的时间显示不同的屏幕。我不知道该怎么做,所以我决定用一个小程序来练习。在我的小程序中我想要三个屏幕:屏幕 1 有一个打开屏幕 2 的按钮,屏幕 2 有一个打开屏幕 3 和屏幕 3 的按钮以及一个打开屏幕 1 的按钮!:
通过一些研究,我发现我可以使用 CardLayout 来做到这一点。在过去的一个小时里,我在 Internet 上来回浏览,这就是我能想到的:
public class DifferentScreensTester extends JFrame implements ActionListener{
CardLayout cl = new CardLayout();
Container contentpane = getContentPane();
JPanel cards = new JPanel();
JPanel screen1 = new JPanel();
JPanel screen2 = new JPanel();
JPanel screen3 = new JPanel();
JButton screen1b = new JButton("Go to screen 1");
JButton screen2b = new JButton("Go to screen 2");
JButton screen3b = new JButton("Go to screen 3");
//constrcutor
public DifferentScreensTester() {
super();
contentpane.setLayout (cl);
//add buttons to respective screens
screen1.add(screen2b);
screen2.add(screen3b);
screen3.add(screen1b);
//add screens to content pane
contentpane.add(screen1, "Screen 1");
contentpane.add("Screen 1", screen1);
contentpane.add("Screen 2", screen2);
contentpane.add("Screen 3", screen3);
//action listeners
screen1b.addActionListener(this);
screen2b.addActionListener(this);
screen3b.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == screen1b) {
cl.show(screen1, "Screen 1");
}
if (event.getSource() == screen2b) {
cl.show(screen2, "Screen 2");
}
if (event.getSource() == screen3b) {
cl.show(screen3, "Screen 3");
}
}
public static void main(String [] args) {
//Scanner sc = new Scanner(System.in);
DifferentScreensTester clmain = new DifferentScreensTester();
clmain.setSize(400, 400);
clmain.setVisible(true);
clmain .setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
第一个 运行 顺利进行。屏幕 1 使用按钮 2 自动打开。
Here's a picture of what I see.
然而,当我第二次点击按钮时,我收到了一条冗长得可怕的错误消息。这是关于为 CardLayout 调用错误的父级。
但是我在过去的半小时里摆弄了我的代码并且无法修复它!我发现 line 的示例代码对我这个低级初学者来说太复杂了,甚至无法开始理解。
如果有人可以告诉我这是怎么回事以及如何解决它,我们将不胜感激。如果您需要任何额外信息,我会提供!谢谢!
It's something about calling the wrong parent for CardLayout.
show(...)
方法需要使用 CardLayout
的面板,而不是您要切换到的面板。
阅读 Swing 教程中关于 How to Use CardLayout 的部分以获得简单的工作示例。
你还在用老方法:
contentpane.add("Screen 1", screen1);
上面使用了add(String, Component)方法。阅读 Container
API。此方法已过时,您应该使用 add(Component component, Object constraint)
版本方法:
contentpane.add(screen1, "Screen 1");
我有一个简短的问题,我相信很快就能得到答案,但尽管我尽力了,但还是无法弄清楚。
所以我正在编写一个游戏代码,我需要在不同的时间显示不同的屏幕。我不知道该怎么做,所以我决定用一个小程序来练习。在我的小程序中我想要三个屏幕:屏幕 1 有一个打开屏幕 2 的按钮,屏幕 2 有一个打开屏幕 3 和屏幕 3 的按钮以及一个打开屏幕 1 的按钮!:
通过一些研究,我发现我可以使用 CardLayout 来做到这一点。在过去的一个小时里,我在 Internet 上来回浏览,这就是我能想到的:
public class DifferentScreensTester extends JFrame implements ActionListener{
CardLayout cl = new CardLayout();
Container contentpane = getContentPane();
JPanel cards = new JPanel();
JPanel screen1 = new JPanel();
JPanel screen2 = new JPanel();
JPanel screen3 = new JPanel();
JButton screen1b = new JButton("Go to screen 1");
JButton screen2b = new JButton("Go to screen 2");
JButton screen3b = new JButton("Go to screen 3");
//constrcutor
public DifferentScreensTester() {
super();
contentpane.setLayout (cl);
//add buttons to respective screens
screen1.add(screen2b);
screen2.add(screen3b);
screen3.add(screen1b);
//add screens to content pane
contentpane.add(screen1, "Screen 1");
contentpane.add("Screen 1", screen1);
contentpane.add("Screen 2", screen2);
contentpane.add("Screen 3", screen3);
//action listeners
screen1b.addActionListener(this);
screen2b.addActionListener(this);
screen3b.addActionListener(this);
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getSource() == screen1b) {
cl.show(screen1, "Screen 1");
}
if (event.getSource() == screen2b) {
cl.show(screen2, "Screen 2");
}
if (event.getSource() == screen3b) {
cl.show(screen3, "Screen 3");
}
}
public static void main(String [] args) {
//Scanner sc = new Scanner(System.in);
DifferentScreensTester clmain = new DifferentScreensTester();
clmain.setSize(400, 400);
clmain.setVisible(true);
clmain .setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
第一个 运行 顺利进行。屏幕 1 使用按钮 2 自动打开。 Here's a picture of what I see. 然而,当我第二次点击按钮时,我收到了一条冗长得可怕的错误消息。这是关于为 CardLayout 调用错误的父级。
但是我在过去的半小时里摆弄了我的代码并且无法修复它!我发现 line 的示例代码对我这个低级初学者来说太复杂了,甚至无法开始理解。
如果有人可以告诉我这是怎么回事以及如何解决它,我们将不胜感激。如果您需要任何额外信息,我会提供!谢谢!
It's something about calling the wrong parent for CardLayout.
show(...)
方法需要使用 CardLayout
的面板,而不是您要切换到的面板。
阅读 Swing 教程中关于 How to Use CardLayout 的部分以获得简单的工作示例。
你还在用老方法:
contentpane.add("Screen 1", screen1);
上面使用了add(String, Component)方法。阅读 Container
API。此方法已过时,您应该使用 add(Component component, Object constraint)
版本方法:
contentpane.add(screen1, "Screen 1");