Java 执行操作后如何移动按钮?
我正在用GridLayout做一个程序。在执行操作后,我尝试将按钮移动到另一个位置时出现问题。基本上,我在面板上有一个按钮大小的空白区域。我想把点击的按钮移到这个空白处,反过来,这个空白处会取代这个按钮。我正在使用一个数组来获得一个看起来像框架的模型。所以我知道空空间在我的数组中的位置(在JButton数组中是一个空值),我试图让这个按钮在数组中取空空间的位置,并反过来。但它并没有真正起作用 任何帮助都将不胜感激Java 执行操作后如何移动按钮?,java,swing,layout-manager,grid-layout,Java,Swing,Layout Manager,Grid Layout,我正在用GridLayout做一个程序。在执行操作后,我尝试将按钮移动到另一个位置时出现问题。基本上,我在面板上有一个按钮大小的空白区域。我想把点击的按钮移到这个空白处,反过来,这个空白处会取代这个按钮。我正在使用一个数组来获得一个看起来像框架的模型。所以我知道空空间在我的数组中的位置(在JButton数组中是一个空值),我试图让这个按钮在数组中取空空间的位置,并反过来。但它并没有真正起作用 任何帮助都将不胜感激 private void setGame(int nbLines, int nbR
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);
}
}
}
}
private void setGame(int-nbline,int-nbRows,int-emptyX,int-emptyY){
pane.removeAll();
对于(int i=0;i
基本上,我在面板上有一个按钮大小的空白区域
你不能有空的空间。您需要向面板添加一个实际组件,以填充GridLayout中的空间
因此,我建议您可以采取以下措施:
容器。remove(…)
删除该单元格上的按钮。然后使用Container.add(component,index)
方法添加一个没有文本的JLabel来填充空单元格Container.getcompent(…)
方法遍历面板中的所有组件,直到找到所单击按钮的索引李>
从概念上讲,类似的东西工作得非常好!谢谢你的帮助。我不知道为什么我没有考虑使用JLabel。对于那些对解决方案感兴趣的人。基本上只需使用JLabel。并交换JLabel(空单元格)和clikhed按钮的行和列索引。(使用执行中的交换)它可以工作。对于那些对解决方案感兴趣的人。基本上只需使用JLabel。并交换JLabel(空单元格)和clikhed按钮的行和列索引。(使用执行中的掉期)