繁体   English   中英

将Jpanel添加到Jpanel后,Java Swing repaint(),revalidate()问题

[英]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();

瓷砖放错了位置,如果要移除瓷砖,我需要重新粉刷。

WithRepaint

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM