Java Swing repaint(),将Jpanel添加到Jpanel后的重新验证()问题
我是java新手,我正在尝试创建自己的拼字游戏。我创建了自己的类Board和Tile两个JPanel。当我在黑板上绘制瓷砖时:Java Swing repaint(),将Jpanel添加到Jpanel后的重新验证()问题,java,swing,Java,Swing,我是java新手,我正在尝试创建自己的拼字游戏。我创建了自己的类Board和Tile两个JPanel。当我在黑板上绘制瓷砖时: Tile tile = new Tile(currentlyChosenLetter, jump); board.add(tile); tile.setBounds(x * jump + 1, y * jump + 1, jump - 2, jump - 2); 当我这样做时,一切似乎都很好: 但在加入: board.revalidate(); board.repa
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
board.revalidate();
board.repaint();
revalidate()语句调用布局管理器,以便根据布局管理器的规则为子组件指定大小和位置。JPanel
的默认布局管理器是FlowLayout
,因此组件显示在一行上
所以不要使用setBounds(…)
。而是使用适当的布局管理器,如GridLayout
,将组件添加到网格的每个正方形中
我建议您可能需要将
JLabel
标记到每个网格。然后,您可以使用给定正方形的默认图标向每个标签添加和图标。然后在添加字母时,用文本替换图标。1“…有2个问题”,然后开始两个问题线程。问答网站也是如此,而不是服务台。2) 发布一篇文章(针对每个问题线程,仅包含与该问题相关的代码)。3) 别忘了问一个明确的问题——问答网站。@MaciekTrystułA,你似乎没有抓住整个答案的要点。Swing设计用于布局管理器,而不是空布局。不需要使用空布局。这是使用GridLayout的完美场景。它为您完成所有布局管理代码。不要重新发明轮子!!!