使用卡片布局更改面板[关闭]
Posted
技术标签:
【中文标题】使用卡片布局更改面板[关闭]【英文标题】:Changing Panels using the Card layout [closed] 【发布时间】:2013-01-27 03:12:43 【问题描述】:嗨,如果这已经发布,我很抱歉,但我仔细看了看,发现了其他我不太理解的代码。我是 Java 编程的新手,希望有人指出我如何通过按下按钮更改为所需面板的正确方向。任何帮助将不胜感激。我只是想完全理解这个概念是如何运作的。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; // Packages used in this program imported
public class onlineGame extends JFrame implements ActionListener
JPanel cards;
JButton button1, button2, button3;
public onlineGame() //This is the CONSTRUCTOR method
//The entry point into your program
setLayout(new FlowLayout()); //Use this for now.
setSize(810, 510); //Set the size of the JFrame
setTitle("Generic Card Game"); //Put Title on top of JFrame
setBackground(Color.yellow);
setResizable(false);
button1 = new JButton("THIS IS BUTTON 1");
button2 = new JButton("THIS IS BUTTON 2");
button3 = new JButton("THIS IS BUTTON 3");
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
//Create the cards
JPanel card1 = new JPanel();
card1.add(button1);
JPanel card2 = new JPanel();
card2.add(button2);
JPanel card3 = new JPanel();
card3.add(button3);
//Create the panel that contains the "cards".
cards = new JPanel(new CardLayout());
cards.add(card1);
cards.add(card2);
cards.add(card3);
getContentPane().add(cards);
setVisible(true); //Make JFrame visible
public void actionPerformed(ActionEvent e)
if (e.getSource() == button1)
//What do i put here to change to Panel card2 or card3 and so on.
public static void main(String args[])
new onlineGame(); // This calls the constructor and runs it
【问题讨论】:
(对于未来的访问者)Oracle documentation for CardLayout 很容易理解。 绝对没有理由关闭它。这绝不是一个狭隘的问题。它与问题一样广泛。 【参考方案1】:要切换到任意面板,请确保在添加卡片组件时指定约束:
cards.add(card1, "Card 1");
cards.add(card2, "Card 2");
cards.add(card3, "Card 3");
然后翻转到不同的组件:
CardLayout cardLayout = (CardLayout) cards.getLayout();
cardLayout.show(cards, "Card 2");
要导航到下一个组件,您可以使用:
cardLayout.next(cards);
阅读:CardLayout
【讨论】:
谢谢。我可以指定我想将其更改为哪个面板,而不是更改为下一个面板。 @aboadam 是的。 Reimeus 已经向您展示了如何实现这一目标。与其使用next
,不如使用CardLayout#show(Container, String)
card1 的对象是否“知道”卡片对象?
如果“知道”你的意思是有办法获取父容器引用,那么可以使用card1.getParent()
...以上是关于使用卡片布局更改面板[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用setActiveItem进行卡片布局以根据单选按钮选择显示面板?
extjs 3 - 卡片布局在 tabpanel 中不起作用
JAVA Swing - 另一个卡片面板上的卡片面板上的选项卡式面板 setSelectedIndex()
Java AWT 图形界面编程LayoutManager 布局管理器 ⑤ ( CardLayout 卡片布局 | ActionListener 按钮点击事件添加 )