[英]create different amount of JTextFields depending on which button was pressed
我的程序打算顯示4個按鈕,每個按鈕都有一個數字,然后根據所按下的按鈕,下一個屏幕將顯示不同數量的JTextField,但是當按下任何按鈕時,下一個面板是否為空白? 感謝您的任何幫助和建議。
public class TestGui {
static int playersSelected = 0;
public static void main(String[] args) {
JFrame gameWindow = new JFrame("Trivial Pursuit");
gameWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameWindow.setSize(800, 650);
gameWindow.setVisible(true);
JPanel mainMenu = new JPanel();
//create layout for main menu
mainMenu.setLayout(new FlowLayout(FlowLayout.CENTER));
//add the contents of the main menu panel to the application window
gameWindow.add(mainMenu);
JButton[] playerButton = new JButton[4];
for (int i = 0; i < playerButton.length; i++) {
final int FinalI = i;
playerButton[i] = new JButton("Button " + i);
mainMenu.add(playerButton[i]);
playerButton[i].setOpaque(true);
playerButton[i].setPreferredSize(new Dimension(271, 123));
playerButton[i].setContentAreaFilled(true);
playerButton[i].setBorder(BorderFactory.createEmptyBorder());
playerButton[i].addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseEntered(java.awt.event.MouseEvent evt) {
playerButton[FinalI].setBorder(BorderFactory.createLoweredBevelBorder());
}
@Override
public void mouseExited(java.awt.event.MouseEvent evt) {
playerButton[FinalI].setBorder(BorderFactory.createEmptyBorder());
}
});
}
JLabel[] playerNumberText = new JLabel[5];
JTextField[] createPlayers = new JTextField[5];
JPanel createPlayersPanel = new JPanel();
createPlayersPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
createPlayersPanel.setVisible(true);
for (int i = 1; i <= playersSelected; i++) {
final int finalI = i;
createPlayers[i] = new JTextField("Player " + i + " input name here");
createPlayers[i].setPreferredSize(new Dimension(160, 20));
playerNumberText[i] = new JLabel();
playerNumberText[i].setText("Player " + i);
playerNumberText[i].setPreferredSize(new Dimension(350, 100));
playerNumberText[i].setHorizontalAlignment(SwingConstants.CENTER);
createPlayersPanel.add(playerNumberText[i]);
createPlayers[i].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (createPlayers[finalI].getText().equals("Player " + finalI + " input name here")) {
createPlayers[finalI].setText("");
}
}
});
}
for (int i = 0; i < playerButton.length; i++) {
final int finalI = i;
playerButton[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
gameWindow.remove(mainMenu);
gameWindow.add(createPlayersPanel);
switch (finalI) {
case 0:
playersSelected = 2;
break;
case 1:
playersSelected = 3;
break;
case 2:
playersSelected = 4;
break;
case 3:
break;
}
gameWindow.revalidate();
gameWindow.repaint();
System.out.println(playersSelected);
}
});
}
}
}
在創建時,由於playerSelected
為0,所以createPlayersPanel
JPanel
為空。
在您的動作偵聽器中,此面板永遠不會更新,因此它是一個空白面板。
您可以做的是創建一種動態構建面板的方法,而不是僅在啟動時構建它。 由於僅在此處使用playerSelected
,因此您可以刪除此靜態變量,並直接從操作偵聽器傳遞值。
private static JPanel buildPlayersPanel(int playerSelected) {
JPanel createPlayersPanel = new JPanel();
createPlayersPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
createPlayersPanel.setVisible(true);
for (int i = 1; i <= playersSelected; i++) {
final int finalI = i;
createPlayers[i] = new JTextField("Player " + i + " input name here");
createPlayers[i].setPreferredSize(new Dimension(160, 20));
playerNumberText[i] = new JLabel();
playerNumberText[i].setText("Player " + i);
playerNumberText[i].setPreferredSize(new Dimension(350, 100));
playerNumberText[i].setHorizontalAlignment(SwingConstants.CENTER);
createPlayersPanel.add(playerNumberText[i]);
createPlayersPanel.add(createPlayers[i]);
createPlayers[i].addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (createPlayers[finalI].getText().equals("Player " + finalI + " input name here")) {
createPlayers[finalI].setText("");
}
}
});
}
return createPlayersPanel;
}
在動作監聽器中:
@Override
public void actionPerformed(ActionEvent ae) {
int playersSelected = 0;
switch (finalI) {
case 0:
playersSelected = 2;
break;
case 1:
playersSelected = 3;
break;
case 2:
playersSelected = 4;
break;
case 3:
break;
}
gameWindow.remove(mainMenu);
gameWindow.add(buildPlayersPanel(playersSelected));
gameWindow.revalidate();
gameWindow.repaint();
System.out.println(playersSelected);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.