我最近正在爲使用3x3按鈕網格的井字遊戲應用程序製作GUI。我通過使用GridBagLayout來添加按鈕,然後將其圖標更改爲白色。當我添加一個ActionListener時,問題就出現了,它將單擊按鈕的圖標設置爲相同大小的「X」。具體來說,我可以讓圖標正常更改,但如果我點擊三個按鈕的行或列,那麼該行或列就會消失。我通過打印出所有按鈕的大小,發現它們的高度或寬度降低到20或更低,並通過擴展其他按鈕尺寸以填充空間來測試此效果。全行之前Java防止按鈕調整圖標變化
窗口點擊
窗口全行點擊
代碼設置初始空白按鈕圖標後:
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)));
}
};
歡迎任何建議,解決方案或建議,謝謝!
非常感謝您的建議,我嘗試了您所說的並製作了一次圖標,並且在ActionEvents被觸發時停止更新包含該按鈕的數組。不過,我仍然遇到同樣的問題,我也嘗試刪除按鈕周圍的邊框以查看是否解決了問題,但仍然存在。我評論了我的ComponentListener,它正在監聽組件的大小調整並且問題消失。我想這意味着更改圖標會觸發ComponentEvent。感謝您的輸入! – KilRil