以随机顺序显示CardLayout卡?

我想在CardLayout中随机下载显示卡片或屏幕的顺序。 我需要有关如何实现这一目标的指导。 我应该使用什么策略?

我尝试使用下面的代码,但它是按固定顺序。 我希望能够选择我喜欢的订单。

编辑!

对不起,按随机顺序我并不是说洗牌。 但是,很高兴知道。 我希望程序的用户能够输入一些输入。 根据输入的值,显示特定的屏幕/卡。

import java.awt.*; import javax.swing.*; import java.awt.event.*; public class CardLayoutExample extends JFrame { private int currentCard = 1; private JPanel cardPanel; private CardLayout cl; public CardLayoutExample() { setTitle("Card Layout Example"); setSize(300, 150); cardPanel = new JPanel(); cl = new CardLayout(); cardPanel.setLayout(cl); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); JPanel p4 = new JPanel(); JLabel lab1 = new JLabel("Card1"); JLabel lab2 = new JLabel("Card2"); JLabel lab3 = new JLabel("Card3"); JLabel lab4 = new JLabel("Card4"); p1.add(lab1); p2.add(lab2); p3.add(lab3); p4.add(lab4); cardPanel.add(p1, "1"); cardPanel.add(p2, "2"); cardPanel.add(p3, "3"); cardPanel.add(p4, "4"); JPanel buttonPanel = new JPanel(); JButton b1 = new JButton("Previous"); JButton b2 = new JButton("Next"); buttonPanel.add(b1); buttonPanel.add(b2); b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (currentCard > 1) { currentCard -= 1; cl.show(cardPanel, "" + (currentCard)); } } }); b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (currentCard < 4) { currentCard += 1; cl.show(cardPanel, "" + (currentCard)); } } }); getContentPane().add(cardPanel, BorderLayout.NORTH); getContentPane().add(buttonPanel, BorderLayout.SOUTH); } public static void main(String[] args) { CardLayoutExample cl = new CardLayoutExample(); cl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); cl.setVisible(true); } } 

这是一种直接跳转到卡片的简单方法。

 final JButton jumpTo = new JButton("Jump To"); buttonPanel.add(jumpTo); jumpTo.addActionListener( new ActionListener(){ @Override public void actionPerformed(ActionEvent ae) { String[] names = {"1","2","3","4"}; String s = (String)JOptionPane.showInputDialog( jumpTo, "Jump to card", "Navigate", JOptionPane.QUESTION_MESSAGE, null, names, names[0]); if (s!=null) { cl.show(cardPanel, s); } } } ); 

显然,这将需要对其余代码进行一些更改。 这是一个SSCCE。

 import java.awt.*; import javax.swing.*; import java.awt.event.*; public class CardLayoutExample extends JFrame { private int currentCard = 1; private JPanel cardPanel; private CardLayout cl; public CardLayoutExample() { setTitle("Card Layout Example"); setSize(300, 150); cardPanel = new JPanel(); cl = new CardLayout(); cardPanel.setLayout(cl); JPanel p1 = new JPanel(); JPanel p2 = new JPanel(); JPanel p3 = new JPanel(); JPanel p4 = new JPanel(); JLabel lab1 = new JLabel("Card1"); JLabel lab2 = new JLabel("Card2"); JLabel lab3 = new JLabel("Card3"); JLabel lab4 = new JLabel("Card4"); p1.add(lab1); p2.add(lab2); p3.add(lab3); p4.add(lab4); cardPanel.add(p1, "1"); cardPanel.add(p2, "2"); cardPanel.add(p3, "3"); cardPanel.add(p4, "4"); JPanel buttonPanel = new JPanel(); JButton b1 = new JButton("Previous"); JButton b2 = new JButton("Next"); buttonPanel.add(b1); buttonPanel.add(b2); b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (currentCard > 1) { currentCard -= 1; cl.show(cardPanel, "" + (currentCard)); } } }); b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (currentCard < 4) { currentCard += 1; cl.show(cardPanel, "" + (currentCard)); } } }); final JButton jumpTo = new JButton("Jump To"); buttonPanel.add(jumpTo); jumpTo.addActionListener( new ActionListener(){ @Override public void actionPerformed(ActionEvent ae) { String[] names = {"1","2","3","4"}; String s = (String)JOptionPane.showInputDialog( jumpTo, "Jump to card", "Navigate", JOptionPane.QUESTION_MESSAGE, null, names, names[0]); if (s!=null) { cl.show(cardPanel, s); } } } ); getContentPane().add(cardPanel, BorderLayout.NORTH); getContentPane().add(buttonPanel, BorderLayout.SOUTH); } public static void main(String[] args) { CardLayoutExample cl = new CardLayoutExample(); cl.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); cl.setVisible(true); } } 

顺便说一句 - 我的评论“你提示用户输入卡号的代码部分在哪里?” 实际上是一种非常微妙的尝试和沟通的方式.. 为了更好的帮助,发布一个SSCCE 。

将CartLayouts放入List中,随机播放List,按List顺序添加到包含的布局。