簡體   English   中英

根據按下哪個按鈕創建不同數量的JTextField

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM