如何按首选顺序设置Jbuttons?

时间:2012-04-15 17:18:52

标签: java swing jbutton

我有一个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);

2 个答案:

答案 0 :(得分: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();
     }
  }

答案 1 :(得分:1)

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