2011-10-18 60 views
2

我在我的應用程序中遇到問題。我希望動態地創建幾個「標籤」滾動窗格,這些窗格可以容納大量名爲「ImageLabels」的對象,這些對象只是標有(你猜對了)圖片的標籤。佈局管理器和滾動窗格的一些問題,未顯示對象

我在Netbeans做了我的大部分gui,因爲它是半複雜的,我自己也太白癡了。我的問題是這樣的:當我添加我的scrollpane對象(包含JPanel與GridLayout),並嘗試添加我的圖像標籤到JPanel與佈局(我的構造函數設置爲「新的GridLayout(0, 5,5,5);「這是無限的行,5列,5 pxls的空間)沒有任何東西出現,滾動面板也不進入」滾動「模式。

我完全處於虧損狀態,並且一直在嘗試不同的佈局。下面是一些代碼,我有...

構造的ImageLabel對象..

addMouseListener(this); 
setVisible(true); 
setPreferredSize(new Dimension(32, 32)); 

我如何設置我的tileHolderPanel的JPanel(面板拿着ImageLabels)

myLayout = new GridLayout(0, 5, 5, 5); 
tileHolderPanel.setLayout(myLayout); 

和建設後我希望添加到每個面板的所有ImageLabels,我只是做

tileHolderPanel.add(label); 

如果它馬特我的TileHolderPanel位於JPanel內部的滾動窗格內,並且它們具有Netbeans生成的默認GroupLayouts。

謝謝 路加福音

回答

4

下面是一個可用於比較代碼的示例。

enter image description here

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridLayout; 
import javax.swing.GroupLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

/** @see http://stackoverflow.com/questions/7801870 */ 
public class ScrollGroup extends JPanel { 

    private static final int N = 8; 
    private static final int NN = N * N; 
    private static final int GAP = 5; 
    private static final int SIZE = 32; 

    public ScrollGroup() { 
     this.setLayout(new GridLayout(N, N, GAP, GAP)); 
     for (int i = 0; i < NN; i++) { 
      JLabel label = new JLabel(); 
      label.setOpaque(true); 
      label.setBackground(Color.getHSBColor((float) i/NN, 1, 1)); 
      label.setPreferredSize(new Dimension(SIZE, SIZE)); 
      this.add(label); 
     } 
    } 

    private void display() { 
     JFrame f = new JFrame("ScrollGroup"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JScrollPane sp = new JScrollPane(this); 
     GroupLayout layout = new GroupLayout(f.getContentPane()); 
     f.setLayout(layout); 
     layout.setAutoCreateGaps(true); 
     layout.setAutoCreateContainerGaps(true); 
     layout.setHorizontalGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup().addComponent(sp))); 
     layout.setVerticalGroup(layout.createSequentialGroup() 
      .addGroup(layout.createParallelGroup().addComponent(sp))); 
     f.pack(); 
     f.setSize(N * SIZE, N * SIZE); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new ScrollGroup().display(); 
      } 
     }); 
    } 
} 
+3

在這種情況下,'GroupLayout'行爲就像'BorderLayout.CENTER'。如果NetBeans的GUI設計師放慢速度,放棄它並花時間學習佈局。 – trashgod

+0

今天晚些時候我會試試這個。我不知道我做了什麼不同,除了你使用GroupLayout和我使用GridLayout。我們拭目以待。在此先感謝,這有助於我是否幫助我解決問題。 :) –

+0

我想通了,非常感謝。 :) –

4

我要動態地創建...

當你將組件添加到一個可見的GUI的基本代碼應該是:

panel.add(...); 
panel.revalidate(); 

如果您需要更多幫助,則需要發佈SSCCE