2013-06-25 35 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