gpt4 book ai didi

Jpanel添加Jpanel后Java Swing repaint()、revalidate()问题

转载 作者:行者123 更新时间:2023-12-01 09:02:56 24 4
gpt4 key购买 nike

我对java很陌生,我正在尝试创建我自己的拼字游戏。我创建了自己的 Board 类和 Tile 类 JPanel。当我在板上绘制图 block 时:

Tile tile = new Tile(currentlyChosenLetter, jump);
board.add(tile);
tile.setBounds(x * jump + 1, y * jump + 1, jump - 2, jump - 2);

当我这样做时,一切似乎都工作正常:

Without repaint

但添加后:

board.revalidate();
board.repaint();

瓷砖放错地方了,我需要重新粉刷以防移除瓷砖。

WithRepaint

x 和 y 从我的鼠标位置获取:

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)并将组件添加到网格的每个方 block 。

我建议您可能需要为每个网格添加一个JLabel。然后,您可以将 Icon 添加到每个标签,并使用给定方 block 的默认图标。然后,添加字母后,将图标替换为文本。

关于Jpanel添加Jpanel后Java Swing repaint()、revalidate()问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com