如何在CardLayout中显示不同的卡?

我查看了使用此代码的代码示例:

cl.show(cardPanel, "" + (currentCard)); 

但是当我使用show时,我在Eclipse中收到一条消息,它已被弃用,我想知道当我点击按钮时是否还有另一种方法可以显示CardLayout中的不同卡片? 下面是我的CardLayout类的代码。 如果代码的某些部分是不好的做法,也欢迎提出建议。 谢谢!

 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class CardLayoutTest extends JFrame implements ActionListener { // Ref private JPanel cardPanel, jp1, jp2, buttonPanel; private JLabel jl1, jl2; private JButton btn1, btn2; private CardLayout cardLayout; // Konstruktor public CardLayoutTest() { setTitle("Test med CardLayout"); setSize(600,400); cardPanel = new JPanel(); buttonPanel = new JPanel(); cardPanel.setLayout(cardLayout); jp1 = new JPanel(); jp2 = new JPanel(); jl1 = new JLabel("Card 1"); jl2 = new JLabel("Card 2"); jp1.add(jl1); jp2.add(jl2); cardPanel.add(jp1, "1"); cardPanel.add(jp2, "2"); btn1 = new JButton("Show Card 1"); btn2 = new JButton("Show Card 2"); buttonPanel.add(btn1); buttonPanel.add(btn2); getContentPane().add(cardPanel, BorderLayout.NORTH); getContentPane().add(buttonPanel, BorderLayout.SOUTH); btn1.addActionListener(this); } public void actionPerformed(ActionEvent event) { // ??? Show card 1 ??? // ??? Show card 2 ??? } public static void main(String[] args) { CardLayoutTest frame = new CardLayoutTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } 

  • 我看不到Java7 show(Container parent,String name)或Java6 show(Container parent,String name)被折旧

  • 取决于currentCard是否从cl.show(cardPanel, "" + (currentCard));返回String cl.show(cardPanel, "" + (currentCard));

编辑(我试过你的代码示例)

你忘了初始化最重要的变量

 private CardLayout cardLayout = new CardLayout(); 

那可能是SSCCE

 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; public class CardLayoutTest extends JFrame { private static final long serialVersionUID = 1L; private JPanel cardPanel, jp1, jp2, buttonPanel; private JLabel jl1, jl2; private JButton btn1, btn2; private CardLayout cardLayout = new CardLayout(); public CardLayoutTest() { setTitle("Test med CardLayout"); setSize(400, 300); cardPanel = new JPanel(); buttonPanel = new JPanel(); cardPanel.setLayout(cardLayout); jp1 = new JPanel(); jp2 = new JPanel(); jl1 = new JLabel("Card 1"); jl2 = new JLabel("Card 2"); jp1.add(jl1); jp2.add(jl2); cardPanel.add(jp1, "1"); cardPanel.add(jp2, "2"); btn1 = new JButton("Show Card 1"); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cardLayout.show(cardPanel, "1"); } }); btn2 = new JButton("Show Card 2"); btn2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { cardLayout.show(cardPanel, "2"); } }); buttonPanel.add(btn1); buttonPanel.add(btn2); add(cardPanel, BorderLayout.NORTH); add(buttonPanel, BorderLayout.SOUTH); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { CardLayoutTest frame = new CardLayoutTest(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } }); } } 

您最有可能在JPanel上调用show(),而不是CardLayout。

方法show()曾经存在于JPanel(更具体地说是Component)中,并且已被setVisible()取代。 这与CardLayout的show()方法完全不同。

确保您在动作侦听器中执行以下操作

 CardLayout cardLayout = (CardLayout)(cardPanel.getLayout()); cardLayout.show(cardPanel, "CardToShow"); 

作为旁注,看起来你没有“正在”你的CardLayout。 确保你这样做。