当前位置: 首页 > 面试题库 >

以随机顺序显示CardLayout的卡片?

叶煌
2023-03-14
问题内容

我想以随机顺序在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



 类似资料:
  • 我是Javascript新手——每次刷新页面时,我都会尝试以不同的顺序重新加载页面上的图像——这样每次访问都会有一个新的网站安排。 类似于这里所做的:pauljung.co.uk 这里使用的函数是MathRandom,它可以调整图像的大小,并在加载时将图像放置在不同的位置。但是,我想知道如何准确地将图像调用到页面的HTML主体上? 我尝试在主体中放置一个间隔gif,并将其链接到id=picture

  • 问题内容: 我看了一个使用此代码的代码示例: 但是,当我使用Eclipse时,我收到一条消息,提示它已过时,我想知道是否还有另一种方法可以在单击按钮时在CardLayout中显示不同的卡片?下面是我的CardLayout类的代码。如果代码的某些部分不正确,也可以提出建议。谢谢! 问题答案: 我看不到Java7 show(容器父代,字符串名称)或Java6 show(容器父代,字符串名称)已过时 如

  • 问题内容: 我有一个HashMap,每次我获得迭代器时,我都希望以不同的随机顺序迭代它们的键值对。从概念上讲,我想在调用迭代器之前对地图进行“混洗”(或者,如果需要,可以对迭代器进行“混洗”)。 我有两种选择: 1)使用LinkedHashMap的方法,并在内部保留条目列表,将其随机洗净,并在调用迭代器时返回该视图。 2)使用map.entrySet(),构造一个ArrayList并在其上使用sh

  • 我创建了一个类,它有一个名为cards的面板,其布局是CardLAyout。我添加了卡片项目。在这个类中,我想通过调用layout来创建一个单独的方法,该方法将切换到下一张卡片。 } 正如你所看到的,我在卡片上添加了其他类的面板。我想做的是创建getNextCard()方法,该方法将当前活动的面板作为其参数。当我调用此功能时,它应该将当前活动的面板切换到我的CardLayout列表中的下一个面板。

  • 问题内容: 我想知道Python内置结构的元素排序是否不足够“随机”。例如,采用集合的迭代器,是否可以将其视为其元素的混合视图? (如果很重要,我将在Windows主机上运行Python 2.6.5。) 问题答案: 不,这 不是 随机的。它是“任意排序”的,这意味着您不能依赖于它是随机的还是随机的。

  • 问题内容: 在此问题中, 有一个功能要求,要求使用可选种子进行订购,以允许随机订购。 我需要能够对随机排序的结果进行分页。用Elasticsearch 0.19.1怎么做? 谢谢。 问题答案: 您可以使用唯一字段(例如id)和随机盐的哈希函数进行排序。根据结果​​的真实程度,您可以执行以下原始操作: 或像 第二个示例将产生更多随机结果,但速度会稍慢。 为了使这种方法起作用,必须存储字段。否则,查询