我是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我从鼠标位置开始:
int jump = board.getHeight() / 15;
int x = (e.getX() / jump);
int y = (e.getY() / jump);
其中e是MouseEvent。
答案 0 :(得分:1)
board.revalidate();
board.repaint();
revalidate()语句调用布局管理器,以便根据布局管理器的规则为子组件指定大小和位置。 JPanel
的默认布局管理器是FlowLayout
,因此组件显示在一行上。
所以不要使用setBounds(...)
。而是使用像GridLayout
这样的适当布局管理器,并将组件添加到网格的每个方格。
我建议您可能希望每个网格JLabel
。然后,您可以使用给定方块的默认图标为每个标签添加Icon
。然后,当添加一个字母时,用文本替换Icon。