Java 将随机值数组添加到JList

Java 将随机值数组添加到JList,java,arrays,swing,random,jlist,Java,Arrays,Swing,Random,Jlist,因此,我试图使我的JList在每次启动程序时都由随机值组成(我使用一个字符串数组将来自2个不同数组的值随机化)。我一直在努力让它工作。当我使用一个数组时,元素会显示出来,但当我使用一个新数组时,它不起作用,该数组由一个字符串组成,其中包含来自这两个数组的2个值。如何使包含两个数组的随机值的数组显示在我的JList上。我尝试了一切,从制作新数组到使用DeaultListModel。感谢您的帮助 这是我的密码: public class game extends JFrame { priv

因此,我试图使我的JList在每次启动程序时都由随机值组成(我使用一个字符串数组将来自2个不同数组的值随机化)。我一直在努力让它工作。当我使用一个数组时,元素会显示出来,但当我使用一个新数组时,它不起作用,该数组由一个字符串组成,其中包含来自这两个数组的2个值。如何使包含两个数组的随机值的数组显示在我的JList上。我尝试了一切,从制作新数组到使用DeaultListModel。感谢您的帮助

这是我的密码:

public class game extends JFrame {

    private JPanel contentPane;
    private JTextField textField_1;
    private JTextField textField_2;

    //\u21BA is Skip, \u20E0 is Reverse. Action and colorName are the arrays I'm randomizing into the JList
    private String[] action = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+2",  "\u21BA", " \u20E0"};
    private Color[] color = {Color.red, Color.blue, Color.green, Color.yellow};
    private String[] colorName = {"Red", "Blue", "Green", "Yellow"};
    private DefaultListModel deck;
    /**
     * Launch the application.
     */
    public static void main (String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    game frame = new game();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public game() {
        setTitle("Uno");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new BorderLayout(0, 0));

        JTextArea textArea = new JTextArea();
        textArea.setRows(5);
        contentPane.add(textArea, BorderLayout.SOUTH);
        \\What I'm struggling with 
        deck = new DefaultListModel();
        for (int i = 0; i <= 7; i++) {
            Random r = new Random();
            deck.addElement(colorName[r.nextInt(colorName.length)] + " " + action[r.nextInt(action.length)]);
        }
        JList list = new JList(deck);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setFont(UIManager.getFont("ColorChooser.font"));
        contentPane.add(list, BorderLayout.WEST);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.EAST);
        GridBagLayout gbl_panel = new GridBagLayout();
        gbl_panel.columnWidths = new int[] {44, 0};
        gbl_panel.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0};
        gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
        gbl_panel.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
        panel.setLayout(gbl_panel);

        JLabel lblNewLabel = new JLabel("Player 1 Card Amount");
        lblNewLabel.setFont(new Font("Dialog", Font.PLAIN, 12));
        GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
        gbc_lblNewLabel.insets = new Insets(0, 0, 5, 0);
        gbc_lblNewLabel.gridx = 0;
        gbc_lblNewLabel.gridy = 3;
        panel.add(lblNewLabel, gbc_lblNewLabel);

        textField_1 = new JTextField();
        textField_1.setEditable(false);
        textField_1.setFont(new Font("Dialog", Font.PLAIN, 12));
        GridBagConstraints gbc_textField_1 = new GridBagConstraints();
        gbc_textField_1.insets = new Insets(0, 0, 5, 0);
        gbc_textField_1.fill = GridBagConstraints.HORIZONTAL;
        gbc_textField_1.gridx = 0;
        gbc_textField_1.gridy = 4;
        panel.add(textField_1, gbc_textField_1);
        textField_1.setColumns(10);

        JLabel lblNewLabel_1 = new JLabel("CPU Card Amount");
        lblNewLabel_1.setFont(new Font("Dialog", Font.PLAIN, 12));
        GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
        gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 0);
        gbc_lblNewLabel_1.gridx = 0;
        gbc_lblNewLabel_1.gridy = 6;
        panel.add(lblNewLabel_1, gbc_lblNewLabel_1);

        textField_2 = new JTextField();
        textField_2.setFont(new Font("Dialog", Font.PLAIN, 12));
        textField_2.setEditable(false);
        GridBagConstraints gbc_textField_2 = new GridBagConstraints();
        gbc_textField_2.fill = GridBagConstraints.HORIZONTAL;
        gbc_textField_2.gridx = 0;
        gbc_textField_2.gridy = 7;
        panel.add(textField_2, gbc_textField_2);
        textField_2.setColumns(10);
    }

}
公共类游戏扩展JFrame{
私有JPanel内容窗格;
私有JTextField textField_1;
私有JTextField textField_2;
//\u21BA是Skip,\u20E0是Reverse。Action和colorName是我将随机化到JList中的数组
私有字符串[]action={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“+2”、“\u21BA”、“\u20E0”};
私有颜色[]颜色={Color.red,Color.blue,Color.green,Color.yellow};
私有字符串[]colorName={“红色”、“蓝色”、“绿色”、“黄色”};
私人模型甲板;
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
公开募捐{
试一试{
游戏框架=新游戏();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
/**
*创建框架。
*/
公共游戏(){
setTitle(“Uno”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(500500);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
setLayout(新的BorderLayout(0,0));
JTextArea textArea=新的JTextArea();
textArea.setRows(5);
添加(textArea,BorderLayout.SOUTH);
\\我在挣扎什么
deck=新的DefaultListModel();

for(int i=0;i
JList
DefaultListModel
都是泛型类型。在这种情况下,它们应该是
JList
DefaultListModel
,尽管这不会引起您的问题。同样,Java的常规惯例是将类名大写(
Game
而不是
Game


你当然不应该每次在循环中都创建一个新的随机牌。在这里创建随机牌对我来说没有意义。它们可能都是红色5。我会创建一副牌,用Fisher Yates(
Collections.shuffle
)洗牌,然后将前七张牌拿到玩家手上


如果该变量是用来握住玩家的手,而不是牌组,那么将其称为
牌组
肯定会让人困惑。听起来这好像是玩家的手。最好将其称为

你当然不应该每次在循环中都创建一个新的随机数。牌组中真的只有七张牌吗?确实如此像这样的UND是玩家的牌。在这里创建随机牌对我来说没有意义。它们可能都是红色5。我会创建一副牌,用Fisher Yates(Collections.shuffle)洗牌,并将前七张牌拿给玩家。
JList
DefaultListModel
都是通用类型。在这种情况下,它们应该是
JList
DefaultListModel
,尽管这不会引起您的问题。此外,Java的正常惯例是将类名大写(
Game
而不是
Game
)。我的意思是玩家持有7张牌。实际的牌组有很多牌。很抱歉造成混淆。如果该变量是用来握住玩家的手,而不是牌组,那么称它为
deck
肯定会让人混淆。)我是按照你说的去做的。托普:如果这有助于解决问题,请告诉我。