我正在使用 for 回圈隨機填充帶有兩個不同按鈕的 8x8 網格。我有一系列按鈕的實體,出于某種原因,它只給我一個按鈕,而不是用任何東西填充網格的其余部分。有什么建議嗎?我只包含了代碼的 buildPanel 塊,但我確實為按鈕和游戲類提供了單獨的類。我也完成了其余的代碼。它并沒有完全滿足我的需要,需要清理,但如果它可能有助于解決這個問題,我可以發布它。我無法在不寫更多細節的情況下在問題中發布比這更多的代碼,但我認為這是一個非常簡單的問題。
private void buildPanel()
{
// Create labels to display the
treasuresLeftLabel = new JLabel("Treasures left: ");
treasuresFoundLabel = new JLabel("Treasures found: ");
triesLeftLabel = new JLabel("Tries left: ");
// Create text fields for each label
treasuresLeftTextField = new JTextField(2);
treasuresLeftTextField.setEditable(false);
treasuresLeftTextField.setText(String.valueOf(20-game.getTreasuresFound()));
treasuresFoundTextField = new JTextField(2);
treasuresFoundTextField.setEditable(false);
treasuresFoundTextField.setText(String.valueOf(game.getTreasuresFound()));
triesLeftTextField = new JTextField(2);
triesLeftTextField.setEditable(false);
triesLeftTextField.setText(String.valueOf(game.getTriesLeft()));
emptyButton = new EmptyButton();
emptyButton.addActionListener(new emptyButtonListener());
treasureButton = new TreasureButton();
treasureButton.addActionListener(new treasureButtonListener());
// new JPanel object referenced by panel
panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(new JLabel("Treasure Hunt", JLabel.CENTER), BorderLayout.NORTH);
statsPanel = new JPanel();
statsPanel.setLayout(new GridLayout(3, 2));
statsPanel.add(treasuresLeftLabel);
statsPanel.add(treasuresLeftTextField);
statsPanel.add(treasuresFoundLabel);
statsPanel.add(treasuresFoundTextField);
statsPanel.add(triesLeftLabel);
statsPanel.add(triesLeftTextField);
panel.add(statsPanel, BorderLayout.WEST);
JButton[] buttons = new JButton[62];
for (int index = 0; index < 62; index )
{
if (index < 20)
{
buttons[index] = treasureButton;
}
else
{
buttons[index] = emptyButton;
}
}
gameGridPanel = new JPanel();
gameGridPanel.setLayout(new GridLayout(8, 8));
// Generate a random number between 0 and 61
int randomNumber = new Random().nextInt(62);
for (int count = 0; count < 62; count )
{
if (buttons[randomNumber] != null)
{
gameGridPanel.add(buttons[randomNumber]);
randomNumber = new Random().nextInt(62);
}
else
{
randomNumber = new Random().nextInt(62);
}
}
panel.add(gameGridPanel, BorderLayout.CENTER);
}
uj5u.com熱心網友回復:
每個按鈕只給我一個
因為每個按鈕只有一個實體:
for (int index = 0; index < 62; index )
{
if (index < 20)
{
buttons[index] = treasureButton; // single instance
}
else
{
buttons[index] = emptyButton; // single instance
}
}
將它添加到陣列時,您需要創建一個新實體。
for (int index = 0; index < 62; index )
{
if (index < 20)
{
//buttons[index] = treasureButton;
buttons[index] = new TreasureButton();
}
else
{
//buttons[index] = emptyButton;
buttons[index] = new EmptyButton();
}
}
還有一種更簡單的隨機化按鈕的方法是:
- 將按鈕添加到
ArrayList - 使用
Collections.shuffle(...)方法隨機化按鈕的順序 - 遍歷
ArrayList每個按鈕并將其添加到網格
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/379940.html
