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

问题描述 投票:0回答:1

我正在使用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);
            }
        }
    }
}
java swing layout-manager grid-layout
1个回答
1
投票

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

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

所以我建议您可以做类似的事情:

  1. 将所有按钮添加到GridLayout
  2. 生成随机数,以确定哪个单元格应该为空。将该值另存为“空单元格”。然后使用Container.remove(...)删除该单元格上的按钮。然后,您可以使用Container.add(component, index)方法添加一个没有文本的JLabel来填充空白单元格。
  3. 然后单击按钮时,将使用Container.getCompnent(...)方法遍历面板中的所有组件,直到找到所单击按钮的索引。
  4. 现在您有两个索引,空单元格和单击的单元格。然后,您可以使用remove(...)和add(...)方法来交换两个组件。
  5. 交换完成后,将“空索引”更新为“单击索引”的值。
© www.soinside.com 2019 - 2024. All rights reserved.