2

我有一个由 30 个按钮组成的网格,我想让它从左到右然后向下,从右到左,再从左到右。基本上编号如下:

1 2 3 4 5 6 7 8 9 10

20 19 18 17 16 15 14 13 12 11

21 22 23 24 25 26 27 28 29 30

因此,如果我在按钮 10 上有一块并且我指示它向上移动 2 位,它将落在 12 而不是 19。

以下是我的代码:

//Creates the button using the loop, adds it into the panel and frame.
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(3,10));
        JButton [] buttons = new JButton[30];
        for(int i=0;i<30;i++){
            buttons[i] = new JButton("label" + i);
            buttons[i].setBackground(Color.white);

        //Puts the player 1 piece on button 1,3,5,7,9 and player 2 piece on button 2,4,6,8,10
           if (i < 10) {
           if (i%2 == 0) {
             buttons[i].setIcon(piece1);
           } else {
             buttons[i].setIcon(piece2);
           }
        }
        panel.add(buttons[i]);
                    }

        frame.add(panel, BorderLayout.CENTER);
4

2 回答 2

3

例如,

  for (int i = 1; i <= buttons.length; i++) { // avoid magic numbers

     int btnNumber = (i > 10 && i <= 20) ? (31 - i) : i;

     System.out.printf("i = %d, btnNumber = %d%n", i, btnNumber);
     buttons[btnNumber - 1] = new JButton("label " + btnNumber);
     buttons[btnNumber - 1].setBackground(Color.white);
     panel.add(buttons[btnNumber - 1]);
  }

或者逻辑部分可以写成,

     if (i > 10 && i <= 20) {
        btnNumber = 31 - i;
     } else {
        btnNumber = i;
     }

但同样,您应该能够自己弄清楚这一点,或者至少向我们展示了一次尝试。

或更一般地说:

  int rows = 5;
  int cols = 10;
  int textNumber = 0;
  for (int i = 0; i < rows * cols; i++) {
     if ((i / cols ) % 2 == 0) {
        textNumber = i;
     } else {
        textNumber = ((i / cols) + 1) * cols - (i % cols) - 1;
     }
     textNumber++;
     System.out.printf("[%02d, %02d] ", i, textNumber);
     if ((i + 1) % cols == 0) {
        System.out.println();
     }
  }
于 2012-04-15T17:43:49.150 回答
1

使用 netbeans 的 spring 布局来解决您的问题
,只需在设计选项卡中设计几个按钮,然后使用您想要的计数将它们复制到一个循环中。

于 2012-04-15T17:26:15.890 回答