我有一个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);
答案 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的弹簧布局来解决您的问题 只需在设计选项卡中设计几个按钮,然后将它们复制到一个具有所需计数的循环中。