2013-06-25 67 views
0

我一個名爲MyPanel擴展JPanel,使用網格佈局類。每個單元格包含一個單一的部件(一個JComboBox,JTextField,JLabel)。過多的JPanel元件尺寸

我的主類,擴展JFrame中,使用的GridBagLayout。當我加入MyPanel它,它佔用了大量的空間(所有窗口去我的桌面空間之外的水平)。我該如何解決? 這是我mainclass

public Client() { 
    super("title"); 
    setResizable(false); 

    Container main_container = getContentPane(); 
    GridBagLayout layout = new GridBagLayout(); 
    GridBagConstraints c = new GridBagConstraints(); 
    main_container.setLayout(layout); 

    MyPanel jpanel_acquisto = new MyPanel(); 
    c.gridx = 0; 
    c.gridy = 0; 
    c.anchor = GridBagConstraints.FIRST_LINE_START; 
    c.fill = GridBagConstraints.NONE; 
    layout.setConstraints(jpanel_acquisto, c); 
    main_container.add(jpanel_acquisto); 

    pack(); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 

} 

MyPanel構造

super(); 
    this.setLayout(new GridLayout(2,5)); 

    combo_box_produttori = new JComboBox(lista_produttori); 
    combo_box_magazzini = new JComboBox(lista_magazzini); 
    descrizione = new JTextField("120 caratteri max", DESCRIPTION_MAX_LENGHT); 
    label_descrizione = new JLabel("Descrizione"); 

    quantita_prodotti = new JTextField(20); 
    label_quantità = new JLabel("Numero prodotti"); 

    salva_acquisto = new JButton("Salva acquisto"); 


    this.add(Box.createGlue()); 
    this.add(label_descrizione); 
    this.add(label_quantità); 
    this.add(Box.createGlue()); 
    this.add(Box.createGlue()); 

    this.add(combo_box_produttori); 
    this.add(descrizione); 
    this.add(quantita_prodotti); 
    this.add(combo_box_magazzini); 
    this.add(salva_acquisto); 
+2

用了知道什麼是在jpanel_acquisto或如何它擺出來,這是不可能知道是什麼問題 – MadProgrammer

+0

我已經貼也MyClass的構造 – giozh

回答

0

網格包佈局自動延伸,並根據它們的大小如果要使用網格包來定位的東西適合其元素的構造函數。您可以在面板內放置空面板充當緩衝區,填充空間以防止主要元素過度拉伸。

main_container.add(fillerPanel); 
main_container.add(jpanel_acquisto); 
main_container.add(fillerPanel); 

,你也將需要調整您的網格包約束,使用提供here靜態常量的完整列表

+0

但元件尺寸過大,在MyPanel我」只有2行和4列。 myPanel的每個單元都拉得太大!事實上,如果我加上我的另一個mainclass與JPanel中其他的東西,它佔據了右空間 – giozh

+1

GridBagLayout的默認不舒展任何東西,它會使用該組件的首選大小,除非你告訴它,你希望它填補可用空間。問題是什麼在jpanel_acquisto – MadProgrammer

+0

爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)。對於滾動窗格,爲 –

3

1)看你的代碼,看來這是什麼; S使其屏幕外:

descrizione = new JTextField("120 caratteri max", DESCRIPTION_MAX_LENGHT);

看起來像120列的JTextField

而是使用:

您也想包上面(的JTextComponent)在JScrollPane

你會做這樣的事情:

int rows=6; 
int cols=20;//20*6=120 characters 
JTextArea ja=new JTextArea(rows,cols); 
ja.setWrapStyleWord(true); 
ja.setLineWrap(true); 
JScrollPane jsp=new JScrollPane(ja); 

2)也不要延長JFrame類,而創建和實例和使用,並確保在創建/在事件指派線程manipluate Swing組件。有關更多信息,請參閱here。即:

SwingUtilities.invokeLater(new Runnable() { 

    @Override 
    public void run() { 

     JFrame frame=new JFrame(); 
     frame.add(..); 
     frame.setVisible(true); 

    } 

}); 
+1

+1 – MadProgrammer