Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing repaint(),将Jpanel添加到Jpanel后的重新验证()问题_Java_Swing - Fatal编程技术网

Java Swing repaint(),将Jpanel添加到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

我是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.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的完美场景。它为您完成所有布局管理代码。不要重新发明轮子!!!