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ビット上に移動するように指示すると、19ではなく12に到達します。

以下は私のコードです:

//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 に答える