我正在開發(fā)一個使用 GridLayout 的程序。當我嘗試在執(zhí)行操作后將按鈕移動到另一個位置時遇到問題?;旧?,我在面板中有一個按鈕大小的空白區(qū)域。我想將點擊的按鈕移動到這個空白區(qū)域,相反,空白區(qū)域?qū)⑷〈@個按鈕。我正在使用數(shù)組來獲取看起來像框架的模型。所以我知道數(shù)組中的空白空間在哪里(這是 JButton 數(shù)組中的空值),并且我試圖使該按鈕占據(jù)數(shù)組中空白空間的位置,反之亦然。但這并沒有真正起作用。任何幫助將不勝感激。private void setGame(int nbLines, int nbRows, int emptyX, int emptyY) { pane.removeAll(); for (int i = 0; i < model.length; i++) { for (int j = 0; j < model[i].length; j++) { if (!(j == emptyY && emptyX == i)) { button = new JButton("A"); model[i][j] = button; pane.add(model[i][j]); model[i][j].addActionListener(this); } } } frame.add(pane); frame.setVisible(true);}public void actionPerformed(ActionEvent e) { for (int i = 0; i < model.length; i++) { for (int j = 0; j < model[i].length; j++) { if (e.getSource() == model[i][j]) { System.out.println("Cordonnées de i : " + i + "Cordonnées de j : " + j); model[i][j] = null; setGame(nbLignes, nbCol, i, j); } } }}
1 回答

米琪卡哇伊
TA貢獻1998條經(jīng)驗 獲得超6個贊
基本上,我在面板中有一個按鈕大小的空白區(qū)域。
你不能有一個空的空間。您需要向面板添加一個實際的組件來填充 GridLayout 中的空間。
所以我建議你可以這樣做:
將所有按鈕添加到 GridLayout
生成一個隨機數(shù)來確定哪個單元格應該為空。將此值保存為“空單元格”。然后使用
Container.remove(...)
刪除該單元格中的按鈕。然后,您使用該Container.add(component, index)
方法添加一個不帶文本的 JLabel 來填充空單元格。然后,當您單擊按鈕時,您將使用該
Container.getCompnent(...)
方法迭代面板中的所有組件,直到找到被單擊按鈕的索引。現(xiàn)在您有兩個索引:空單元格和單擊的單元格。然后使用remove(...) 和add(...) 方法來交換這兩個組件。
交換完成后,您將“空索引”更新為“單擊索引”的值。
添加回答
舉報
0/150
提交
取消