代码之家  ›  专栏  ›  技术社区  ›  Krishna Chalise

GridLayout为“new GridLayet(22,1)”显示2行`

  •  2
  • Krishna Chalise  · 技术社区  · 9 年前

    我正在尝试创建一个游戏记分板(Yahtzee)。scorepanel必须由22行和1列组成,但我正在编写的以下代码为每个玩家显示12行和2列。

    import javax.swing.*;
    import javax.swing.border.MatteBorder;
    import java.awt.*;
    
    public class PanelTest {
    
        private final String player1 = "krishna";
        private final String player2 = "Suresh";
    
        public PanelTest(){
    
            JFrame gameWindow = new JFrame("Play Game");
            gameWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JPanel gamePanel = new JPanel();
            gamePanel.setLayout(new GridLayout(1,2));
    
    /************ Scorepannel Creation starts here********************/
    
            JPanel scorePanel;
            scorePanel = createScorePanel();
    
    /***************** Scorepanel Creation Ends Here*****************/
    
            //adding scorePanel to gamePanel
            scorePanel.setSize(500,540);
            gamePanel.add(scorePanel, BorderLayout.WEST);
    
            //adding gamePanel to gameWindow
            gameWindow.add(gamePanel);
    
            gameWindow.setSize(1000, 540);
            gameWindow.setVisible(true);
        }
    
        public JPanel createScorePanel(){
    
            JPanel scorePanel = new JPanel();
    
            JPanel[] columns;
            columns = new JPanel[3];
    
            JLabel[] player1score;
            player1score = new JLabel[22];
    
            JLabel[] playerNames;
            playerNames = new JLabel[2];
    
            playerNames[0] = new JLabel(player1);
            playerNames[1] = new JLabel(player2);
    
            columns[0] = new JPanel();
            columns[0].setSize(200, 540);
            columns[0].setLayout(new GridLayout(22,0));
    
            for (int count = 1; count <= (playerNames.length) ; count++ ){
                columns[count] = new JPanel();
                columns[count].setSize(150,540);
                columns[count].setLayout(new GridLayout(22,1));
    
                for (int i = 0; i < player1score.length; i++){
                    if(count == 1 && i == 0){
                        player1score[i] = new JLabel(player1);
                        player1score[i].setBorder(new MatteBorder(1, 1, 1, 1, Color.GREEN));
                        columns[count].add(player1score[i]);
                    }
    
                    if (count == 2 && i == 0){
                        player1score[i] = new JLabel(player2);
                        player1score[i].setBorder(new MatteBorder(1, 1, 1, 1, Color.GREEN));
                        columns[count].add(player1score[i]);
                    }
    
                    player1score[i] = new JLabel();
                    player1score[i].setBorder(new MatteBorder(1, 1, 1, 1, Color.BLACK));
                    columns[count].add(player1score[i]);
                }
    
                scorePanel.add(columns[count]);
            }
    
    
            return scorePanel;
        }
    
        public static void main(String[] args) {
            new PanelTest();
        }
    }
    
    1 回复  |  直到 9 年前
        1
  •  2
  •   Florian S.    9 年前

    你的 createScorePanel() Jlabel 因为在创建一个播放器标签时,您确实添加了其中两个。以下是更正版本:

    public JPanel createScorePanel(){
    
        JPanel scorePanel = new JPanel();
    
        JPanel[] columns;
        columns = new JPanel[3];
    
        JLabel[] player1score;
        player1score = new JLabel[22];
    
        JLabel[] playerNames;
        playerNames = new JLabel[2];
    
        playerNames[0] = new JLabel(player1);
        playerNames[1] = new JLabel(player2);
    
        columns[0] = new JPanel();
        columns[0].setSize(200, 540);
        columns[0].setLayout(new GridLayout(22,0));
    
        for (int count = 1; count <= (playerNames.length) ; count++ ){
            columns[count] = new JPanel();
            columns[count].setSize(150,540);
            columns[count].setLayout(new GridLayout(22,1));
    
            for (int i = 0; i < player1score.length; i++){
                if (count == 1 && i == 0) {
                    player1score[i] = new JLabel(player1);
                    player1score[i].setBorder(new MatteBorder(1, 1, 1, 1, Color.GREEN));
                    columns[count].add(player1score[i]);
                }
                else if (count == 2 && i == 0) {
                    player1score[i] = new JLabel(player2);
                    player1score[i].setBorder(new MatteBorder(1, 1, 1, 1, Color.GREEN));
                    columns[count].add(player1score[i]);
                }
                else {
                    player1score[i] = new JLabel();
                    player1score[i].setBorder(new MatteBorder(1, 1, 1, 1, Color.BLACK));
                    columns[count].add(player1score[i]);
                }
            }
            scorePanel.add(columns[count]);
        }
        return scorePanel;
    }