簡體   English   中英

將Jpanel添加到Jpanel后,Java Swing repaint(),revalidate()問題

[英]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();

瓷磚放錯了位置,如果要移除瓷磚,我需要重新粉刷。

WithRepaint

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM