[英]JPanel revalidate and repaint not working properly (Java Swing)
[英]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();
瓷磚放錯了位置,如果要移除瓷磚,我需要重新粉刷。
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.