2014-07-24 30 views
-1

我的主要問題是製作一個按鈕矩陣,點擊後會向我發送2個整數值(行和列)。矩陣是十五,第一行有7列,第二行有5,第三行有9,ectr ...我發現一個很好的解決方案,使矩陣,但是當我使用remove(),比佈局瞬間改變按鈕的位置......這裏是代碼的一部分。JButton,它們的矩陣不均勻(如第1行7列,第2行9,ectr)

private static JButton[][] buttons; 
    public static JFrame f = new JFrame(); 

    public TEMPus(int row, int col) { 
     super(new GridLayout(row, col)); 

     buttons = new JButton[row][col]; 

     for (int i = 0; i < buttons.length; i++) { 
     for (int j = 0; j < buttons[i].length; j++) { 
      final int curRow = i; 
      final int curCol = j; 
      buttons[i][j] = new JButton(j + ", " + i); 
      buttons[i][j].addKeyListener(enter); 
      buttons[i][j].addKeyListener(new KeyAdapter() { 
       @Override 
       public void keyPressed(KeyEvent e) { 
        switch (e.getKeyCode()) { 
        case KeyEvent.VK_UP: 
        if (curRow > 0) 
         buttons[curRow - 1][curCol].requestFocus(); 
        break; 
        case KeyEvent.VK_DOWN: 
        if (curRow < buttons.length - 1) 
         buttons[curRow + 1][curCol].requestFocus(); 
        break; 
        case KeyEvent.VK_LEFT: 
        if (curCol > 0) 
         buttons[curRow][curCol - 1].requestFocus(); 
        break; 
        case KeyEvent.VK_RIGHT: 
        if (curCol < buttons[curRow].length - 1) 
         buttons[curRow][curCol + 1].requestFocus(); 
        break; 
        default: 
        break; 
        } // end of switch 
       } 
      }); //end of key listener 
      add(buttons[i][j]); 
     } 
     } 
    } 

和這裏就是我試圖刪除某些按鈕主...

public static void main(String[] args) { 

     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     TEMPus temp1 =new TEMPus(3, 5); 
     temp1.remove(buttons[1][4]); 
     f.add(temp1); 
     f.pack(); 
     f.setVisible(true); 
     } 

很抱歉的長期職位:/並感謝您的時間:)

回答

1

佈局不能改變按鈕的名稱,只能改變按鈕的位置。

如果你想保留按鈕的位置,簡單的解決方案是隱藏一個按鈕(setVisible(false))而不是刪除它。更靈活的解決方案是將所有按鈕放置在JPanel中,並將該按鈕替換爲空的畫布(另請參閱this answer)。

+0

謝謝,這正是我在這個論壇上尋找的過去2-3個小時O_o,我覺得有點笨。再次感謝您抽出時間^^ PS:我編輯了關於該名稱的部分,是的,它不會更改ot,只會與位置錯誤地拼錯,所以我誤解了它。 –

相關問題