2014-10-28 95 views
0

我有JFrame包含兩個面板。GridBaglyout填充不會調整容器內的組件的大小

第一個面板(jpanel1)有一個歡迎信息。

第二個面板(jpanel2)的JTable包含在JScrollPane中。

每當JFrame調整大小時,我想要JTable使用額外的空間。

我用了GridBagLayout實現這一

c.gridx=0c.gridy=0jpanel1

c.gridx=0c.gridy=1c.fill=BOTHjpanel2

我看到jpanel2在幀大小增加時會增長。

只要jpanel2大小增加,需要做什麼來增加滾動窗格和表格大小。

+1

考慮提供一個[可運行示例](https://stackoverflow.com/help/mcve),這說明你的問題。這將導致更少的混淆和更好的響應 – MadProgrammer 2014-10-28 06:26:15

+1

更改'jpanel2'的佈局管理器以使用'BorderLayout' ... – MadProgrammer 2014-10-28 06:28:19

回答

2

您的LayoutManager的問題。

  1. 使用BorderLayoutjpanel2通過MadProgrammer的建議,調整大小JScrollPanejpanel2

  2. 使用c.fill=BOTH您需要使用c.weightx = 1;c.weighty = 1;來指定組件需要佔用多少額外空間。閱讀more

這裏是例子:

import java.awt.BorderLayout; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 

import javax.swing.BorderFactory; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 

public class TestFrame extends JFrame { 

    public TestFrame() { 
     init(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    private void init() { 
     JPanel p1 = new JPanel(); 
     p1.setBorder(BorderFactory.createTitledBorder("P1")); 
     p1.add(new JLabel("test")); 

     JPanel p2 = new JPanel(new BorderLayout()); 
     p2.setBorder(BorderFactory.createTitledBorder("P2")); 

     p2.add(new JScrollPane(new JTable(2,2))); 

     setLayout(new GridBagLayout()); 

     GridBagConstraints c = new GridBagConstraints(); 

     c.gridx=0; 
     c.gridy=0; 
     add(p1,c); 

     c.fill = GridBagConstraints.BOTH; 
     c.weightx = 1; 
     c.weighty = 1; 
     c.gridx=0; 
     c.gridy=1; 
     add(p2,c); 
    } 

    public static void main(String args[]) { 
     new TestFrame(); 
    } 

}