我正在開發(fā)一個(gè)使用 GridLayout 的程序。當(dāng)我嘗試在執(zhí)行操作后將按鈕移動(dòng)到另一個(gè)位置時(shí)遇到問題?;旧?,我在面板中有一個(gè)按鈕大小的空白區(qū)域。我想將點(diǎn)擊的按鈕移動(dòng)到這個(gè)空白區(qū)域,相反,空白區(qū)域?qū)⑷〈@個(gè)按鈕。我正在使用數(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貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
基本上,我在面板中有一個(gè)按鈕大小的空白區(qū)域。
你不能有一個(gè)空的空間。您需要向面板添加一個(gè)實(shí)際的組件來填充 GridLayout 中的空間。
所以我建議你可以這樣做:
將所有按鈕添加到 GridLayout
生成一個(gè)隨機(jī)數(shù)來確定哪個(gè)單元格應(yīng)該為空。將此值保存為“空單元格”。然后使用
Container.remove(...)
刪除該單元格中的按鈕。然后,您使用該Container.add(component, index)
方法添加一個(gè)不帶文本的 JLabel 來填充空單元格。然后,當(dāng)您單擊按鈕時(shí),您將使用該
Container.getCompnent(...)
方法迭代面板中的所有組件,直到找到被單擊按鈕的索引。現(xiàn)在您有兩個(gè)索引:空單元格和單擊的單元格。然后使用remove(...) 和add(...) 方法來交換這兩個(gè)組件。
交換完成后,您將“空索引”更新為“單擊索引”的值。
添加回答
舉報(bào)
0/150
提交
取消