我需要一个简单的示例,说明如何使用 CardLayout(或其他东西?)在一个 JFrame 中管理多个 JPanel(使用不同的类创建)。这是我需要的一个说明性示例:
面板A:
面板B:
文件结构示例:
// Gui.java
public class Gui {
...
...
...
}
// PanelA.java
public class PanelA {
...
...
... () {
JPanel pnl = new JPanel();
pnl.setBackground(Color.ORANGE);
JButton btn = new JButtn("Show Panel B");
pnl.add(btn);
}
public void actionPerformed(ActionEvent ae) {
...
}
}
// PanelB.java
public class PanelB {
...
...
... () {
JPanel pnl = new JPanel();
pnl.setBackground(Color.GREEN);
JButton btn = new JButtn("Show Panel A");
pnl.add(btn);
}
public void actionPerformed(ActionEvent ae) {
...
}
}
我发现很多这样做的示例,但所有 JPanel 都是在同一个类中创建的,并以 JButton 作为字段,以便监听器可以访问它们。我尝试编辑这些示例,但没有成功。 抱歉我的英语不好,提前谢谢您!
最佳答案
尝试这样的事情:
Gui.java:
public class Gui {
...
JPanel cards = ne JPanel(new CardLayout());
private void initComponetns() {
...
// cards to be the container with CardLayout...
cards.add(new PanelA(this));
cards.add(new PanelB(this));
...
}
}
PanelA.java
public class PanelA extends JPanel {
...
private final Gui gui;
PanelA(Gui gui) {
this.gui = gui;
}
... () {
setBackground(Color.ORANGE);
JButton btn = new JButtn("Show Panel B");
add(btn);
}
public void actionPerformed(ActionEvent ae) {
...
gui.cards. ...
}
}
PanelB.java
public class PanelB extends JPanel {
...
private final Gui gui;
PanelB(Gui gui) {
this.gui = gui;
}
...
... () {
setBackground(Color.GREEN);
JButton btn = new JButtn("Show Panel A");
add(btn);
}
public void actionPerformed(ActionEvent ae) {
...
gui.cards. ...
}
}
已编辑...
关于java - 管理使用不同类创建的 Java CardLayout JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45677253/