2017-05-04 82 views
0

我將Arraylist中的JLabel添加到JPanel,它們只會在面板上設置佈局時顯示,但我想設置標籤的位置,我嘗試使用panel = new JPanel(null);所有標籤不顯示。JPanel(null)不顯示JLabels

框架:

public static void Frame(){ 
     panel = new JPanel(null); 
     JFrame frame = new JFrame("New"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
     frame.pack(); 
     frame.setSize(400,400); 
     frame.add(panel); 
} 

ArrayList的迭代,增加了標籤面板

private static void printArray() { 
     for(int i = 0; i < food.size(); i++){ 
      component = new JLabel(new Food(food.get(i).getColor(), 
      food.get(i).getIconHeight(), food.get(i).getIconWidth(), 
      food.get(i).getLocationX(), food.get(i).getLocationY())); 
      panel.add(component); 
      component.setLocation(food.get(i).getLocationX(), 
      food.get(i).getLocationY()); 
     } 
} 

我可以從調試看到它絕對是在獲取定位信息,那麼,爲什麼不把它放在這個位置。

enter image description here

+1

猜猜「佈局管理器」做了什麼工作?猜猜將它設置爲null時會發生什麼 – MadProgrammer

+1

*「我將Arraylist中的JLabel添加到JPanel,並且只有當我設置佈局時纔會顯示*」 - 這是正確的,*「但我想設置位置我自己的標籤「* - 嗯,首先,我會問爲什麼?你想做什麼,可用的佈局管理員不能做什麼? – MadProgrammer

+0

@MadProgrammer hey mate im遵循以下代碼http://www.camick.com/java/source/MotionWithKeyListener.java,看起來好像他做了同樣的事情,它的工作正常,他的代碼。將layout設置爲null的原因是我可以更新標籤的位置,這樣我就可以用鍵盤輸入「移動」它,並且在這個文檔中他們還建議將它設置爲null https://docs.oracle.com/ javase/tutorial/uiswing/layout/none.html Ps熱愛你的工作。 – Ross

回答

1

之所以要設置佈局空的,所以我可以更新標籤的位置,所以我可以用鍵盤輸入

你需要的第一件事情圍繞着「移動」它要做的是理解佈局經理實際上做了什麼工作,因爲如果你要刪除它,你將需要接管它的工作。

佈局管理器負責確定組件的大小和位置。他們通過各種方式做到這一點,但可以利用組件的方法。

所以這會建議你需要讓你自己決定這些值,例如...

component = new JLabel(new Food(food.get(i).getColor(), 
     food.get(i).getIconHeight(), food.get(i).getIconWidth(), 
     food.get(i).getLocationX(), food.get(i).getLocationY())); 
component.setSize(component.getPreferredSize()); 
component.setLocation(food.get(i).getLocationX(), food.get(i).getLocationY()); 

我也建議使用Key BindingsKeyListener,它不會從同患重點相關問題