为了账号安全,请及时绑定邮箱和手机立即绑定

如何在执行操作后移动按钮?

如何在执行操作后移动按钮?

慕虎7371278 2024-01-05 15:09:25
我正在开发一个使用 GridLayout 的程序。当我尝试在执行操作后将按钮移动到另一个位置时遇到问题。基本上,我在面板中有一个按钮大小的空白区域。我想将点击的按钮移动到这个空白区域,相反,空白区域将取代这个按钮。我正在使用数组来获取看起来像框架的模型。所以我知道数组中的空白空间在哪里(这是 JButton 数组中的空值),并且我试图使该按钮占据数组中空白空间的位置,反之亦然。但这并没有真正起作用。任何帮助将不胜感激。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条经验 获得超6个赞

基本上,我在面板中有一个按钮大小的空白区域。

你不能有一个空的空间。您需要向面板添加一个实际的组件来填充 GridLayout 中的空间。

所以我建议你可以这样做:

  1. 将所有按钮添加到 GridLayout

  2. 生成一个随机数来确定哪个单元格应该为空。将此值保存为“空单元格”。然后使用Container.remove(...)删除该单元格中的按钮。然后,您使用该Container.add(component, index)方法添加一个不带文本的 JLabel 来填充空单元格。

  3. 然后,当您单击按钮时,您将使用该Container.getCompnent(...)方法迭代面板中的所有组件,直到找到被单击按钮的索引。

  4. 现在您有两个索引:空单元格和单击的单元格。然后使用remove(...) 和add(...) 方法来交换这两个组件。

  5. 交换完成后,您将“空索引”更新为“单击索引”的值。


查看完整回答
反对 回复 2024-01-05
  • 1 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信