2015-03-25 49 views
0

我無法使用setPreferredSize函數設置動態創建的JPanel大小。還有其他方法嗎?如何設置動態創建的jpanel的高度?

main_panel.removeAll(); 
     main_panel.revalidate(); 
     main_panel.repaint(); 
     panel = new JPanel[100]; 
     Login.session = Login.sessionfactory.openSession(); 
     Login.session.beginTransaction(); 
     String select_n_p_4 = "select a.triage_id from PC_TRIAGE_MASTER_POJO a"; 
     org.hibernate.Query query1 = Login.session.createQuery(select_n_p_4); 
     List l3 = query1.list(); 
     Iterator it3 = l3.iterator(); 
     while (it3.hasNext()) { 
      Object a4 = (Object) it3.next(); 
      int f = (int) a4; 
      main_panel.setLayout(new GridLayout(0, 1, 1, 10)); 
      panel[ind] = new JPanel(); 
      panel[ind].setPreferredSize(new Dimension(10, 10)); 
      panel[ind].setBorder(triage_boder); 
      count++; 
      main_panel.add(panel[ind]); 
      main_panel.revalidate(); 
      main_panel.repaint(); 
      ind++; 
     } 
+0

讓我們從'[應該避免使用Java Swing中的set(Preferred | Maximum | Minimum)尺寸方法?](http://stackoverflow.com/questions/7229226/should-i-avoid-the- use-of-setpreferredmaximumminimumsize-methods-in-java-swi)'然後問什麼'main_panel'用於佈局管理器 – MadProgrammer 2015-03-25 04:05:16

+0

爲什麼你不能? – Mordechai 2015-03-25 04:05:58

回答

0

你的問題是你使用的佈局管理器。 GridLayout根據父組件的大小創建一個統一的網格,並手動將組件嵌入到每個單元格中。你的代碼似乎表明你想爲l3中的每個元素創建一個10 x 10的JPanel,每個元素都是一個在另一個之上,以10個像素分隔。這裏是在你的程序的情況下一種可能的方法使用BoxLayout,它不使用單獨的組件的大小:

Dimension dim = new Dimension(10, 10); 
main_panel.setLayout(new BoxLayout(main_panel, BoxLayout.PAGE_AXIS)); 
for (Iterator it3 = l3.iterator; it3.hasNext();) { 
    panel[ind] = new JPanel(); 
    panel[ind].setPreferredSize(dim); 
    panel[ind].setMaximumSize(dim); 
    main_panel.add(panel); 
    main_panel.add(Box.createRigidArea(dim)); 
    count++; 
    ind++; 
} 
// you probably don't need this call 
main_panel.revalidate(); 

在大多數情況下,你應該只設置一個組件的佈局一次,而不是每次添加一個零件。通過重新驗證/重新繪製,您只需要調用這些方法if you add/remove components at runtime。祝你好運!