Java防止按钮调整图标更改

时间:2015-10-16 14:37:52

标签: java swing button layout icons

我最近正致力于使用3x3网格按钮为井字游戏应用程序制作GUI。我这样做是通过使用GridBagLayout添加按钮,然后将其图标更改为白色。当我添加一个ActionListener时,会出现问题,该ActionListener将单击按钮的图标设置为相同大小的“X”。具体来说,我可以让图标改变,但如果我点击三个按钮的行或列,那么该行或列就会消失。我通过打印出所有按钮的尺寸来测试它,发现它们的高度或宽度减小到20或更低,其他按钮尺寸扩大以填补空间。

点击完整行前的窗口

http://i.stack.imgur.com/hZ4OR.png

点击完整行后的窗口

http://i.stack.imgur.com/g45CD.png

设置初始空白按钮图标的代码:

while(i < cells.length) {
        cells[i].cell = new JButton(new ImageIcon(br.getScaledInstance(100, 100, BufferedImage.SCALE_FAST)));
        cells[i].cell.setBorder(BorderFactory.createEmptyBorder());
        cells[i].cell.setFocusPainted(false);
        if(i < 3) {
        cells[i].cell.setBorder(lines);
        }
        if(i >= 3 && i < 6) {
            cells[i].cell.setBorder(line2);
        }
        if(i >= 6) {
            cells[i].cell.setBorder(nat);
        }

        i++;
    }

点击时设置X的代码:

ActionListener act = new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            JButton testo = (JButton) e.getSource();
            loc = getIndice(testo);
            System.out.println("LOC IS: " + loc);


                cells[loc].cell.setIcon(new ImageIcon(bro.getScaledInstance(cells[loc].cell.getSize().width, cells[loc].cell.getSize().height , BufferedImage.SCALE_SMOOTH)));  
        }
    };

欢迎任何建议,解决方案或建议,谢谢!

1 个答案:

答案 0 :(得分:1)

cells[i].cell = new JButton(new ImageIcon(br.getScaledInstance(100, 100, BufferedImage.SCALE_FAST)));

您无需为每个按钮创建单独的图标。您可以在循环外创建一次Icon,然后使用每个按钮的Icon

更改按钮时,使用按钮的大小。由于您的按钮使用边框,因此无法使用按钮的大小作为空白图标大小和“X”图标大小将不同。只需使用(100,100),就像创建默认图标时一样。代码会简单得多:

 cells[loc].cell.setIcon(new ImageIcon(bro.getScaledInstance(100, 100, BufferedImage.SCALE_SMOOTH)));  

同样,您不需要每次都重新创建Icon。只需在类的构造函数中创建一次Icon。

因此,在开始时创建所有图标,它们都将具有相同的大小,当您切换图标时,您不必担心组件更改大小。

此外,您无需更新包含按钮的阵列。 ActionEvent提供了点击源,因此您只需更改单击按钮上的图标即可。