Java 将随机值数组添加到JList
因此,我试图使我的JList在每次启动程序时都由随机值组成(我使用一个字符串数组将来自2个不同数组的值随机化)。我一直在努力让它工作。当我使用一个数组时,元素会显示出来,但当我使用一个新数组时,它不起作用,该数组由一个字符串组成,其中包含来自这两个数组的2个值。如何使包含两个数组的随机值的数组显示在我的JList上。我尝试了一切,从制作新数组到使用DeaultListModel。感谢您的帮助 这是我的密码:Java 将随机值数组添加到JList,java,arrays,swing,random,jlist,Java,Arrays,Swing,Random,Jlist,因此,我试图使我的JList在每次启动程序时都由随机值组成(我使用一个字符串数组将来自2个不同数组的值随机化)。我一直在努力让它工作。当我使用一个数组时,元素会显示出来,但当我使用一个新数组时,它不起作用,该数组由一个字符串组成,其中包含来自这两个数组的2个值。如何使包含两个数组的随机值的数组显示在我的JList上。我尝试了一切,从制作新数组到使用DeaultListModel。感谢您的帮助 这是我的密码: public class game extends JFrame { priv
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;iJList
和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
肯定会让人混淆。)我是按照你说的去做的。托普:如果这有助于解决问题,请告诉我。