2

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);
}
}
4

2 に答える 2

4

CartLayoutsをリストに入れ、リストをシャッフルし、リストの順序で含まれているレイアウトに追加します。

于 2013-03-07T23:01:08.017 に答える
3

カードに直接ジャンプする簡単な方法は次のとおりです。

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を投稿してください。

于 2013-03-09T07:27:14.450 に答える