以随机顺序显示CardLayout的卡片吗? [英] Display cards of CardLayout in random order?
问题描述
我想在CardLayout中随机显示卡或屏幕.我需要有关如何完成此操作的指导.我应该使用什么策略?
I want to have a random order for displaying the cards or screens in my CardLayout. I need guidance on how to accomplish this. What is strategy I should use?
我尝试使用下面的代码,但它的顺序固定.我希望能够选择我喜欢的任何顺序.
I tried using the code below, but it is in a fixed order. I want to be able to choose whichever order I like.
编辑!
对不起,按照随机顺序,我不是说改组.但是,很高兴知道.我希望程序的用户能够输入一些输入.根据输入的值,显示特定的屏幕/卡.
Sorry, by random order I did not mean shuffling. But, it is good to know. I want the user of the program to be able to enter some input. Depending on the value of the input, a particular screen/card is displayed.
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);
}
}
推荐答案
这是直接跳转到卡片的简单方法.
Here is a simple way to jump directly to a card.
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.
Obviously this will require some changes to the rest of the code. Here is an 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 .
BTW - my comment "Where is the part of the code where you prompt the user for a card number?" was actually a very subtle way to try & communicate.. For better help sooner, post an SSCCE.
这篇关于以随机顺序显示CardLayout的卡片吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!