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

标签 java swing layout-manager grid-layout

我正在使用 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);
            }
        }
    }
}

最佳答案

Basically, i have an empty space in the panel with the size of a button.

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

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

  1. 将所有按钮添加到GridLayout
  2. 生成一个随机数以确定哪个单元格应为空。将此值保存为“空单元格”。然后使用 Container.remove(...) 删除该单元格中的按钮。然后使用 Container.add(component, index) 方法添加一个不带文本的 JLabel 来填充空单元格。
  3. 然后,当您单击按钮时,您将使用 Container.getCompnent(...) 方法遍历面板中的所有组件,直到找到所单击按钮的索引。
  4. 现在您有两个索引:空单元格和单击的单元格。然后使用remove(...) 和add(...) 方法交换这两个组件。
  5. 交换完成后,您将“空索引”更新为“点击索引”的值。

关于java - 如何在执行操作后移动按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58583713/

相关文章:

java - 如何在svn中查找文件夹内的文件数

java - 无法弄清楚为什么音频文件不播放 (Java)

java swing Graphics2d 抽绳不工作

java - 尝试将使用 CardLayout 的 JPanel 添加到 JFrame

java - WatchService 和 SwingWorker : how to do it correctly?

java - 将 JTable 添加到 JFrame

Java Swing GridBagLayout JTextField 添加错误消息后更改大小

java - 如何将 sql 查询的结果发布到 servlet 中?

java - Eclipse 项目源菜单仅显示 "Format"

java - 使添加的 JPanel 在父 JPanel 中可见