[英]JPanel revalidate and repaint not working properly (Java Swing)
[英]Java Swing repaint(), revalidate() issue after addind Jpanel to Jpanel
我是Java的新手,我正在尝试创建自己的拼字游戏。 我创建了自己的类Board和Tile两个JPanels。 在即时贴上画图时:
Tile tile = new Tile(currentlyChosenLetter, jump);
board.add(tile);
tile.setBounds(x * jump + 1, y * jump + 1, jump - 2, jump - 2);
当我这样做时,一切似乎都很好:
但添加后:
board.revalidate();
board.repaint();
瓷砖放错了位置,如果要移除瓷砖,我需要重新粉刷。
x和y im从我的鼠标位置获取:
int jump = board.getHeight() / 15;
int x = (e.getX() / jump);
int y = (e.getY() / jump);
其中e是MouseEvent。
board.revalidate();
board.repaint();
revalidate()语句将调用布局管理器,以便根据布局管理器的规则为子组件指定大小和位置。 JPanel
的默认布局管理器是FlowLayout
因此组件显示在一行上。
所以不要使用setBounds(...)
而是使用像GridLayout
这样的适当的布局管理器,并将组件添加到网格的每个正方形。
我建议您可能要对每个网格使用JLabel
。 然后,您可以使用给定正方形的默认图标向每个标签添加和Icon
。 然后,在添加字母后,用文本替换图标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.