我认为只有(注意行永远不会通过使用任何 LayoutManager 来调整大小,只有列)
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty = 0;
GBC 不适合 JComponents 的 LayoutManager 实现 Scrollable,对这些 JComponents 使用 BorderLayout(ev GridLayout)
例如
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class JTableAndGBC {
    private String[] columnNames = {"Source", "Hit", "Last", "Ur_Diff"};
    private JTable table;
    private Object[][] data = {{"Swing Timer", 2.99, 5, 1.01},
        {"Swing Worker", 7.10, 5, 1.010}, {"TableModelListener", 25.05, 5, 1.01}};
    private DefaultTableModel model = new DefaultTableModel(data, columnNames);
    public JTableAndGBC() {
        JPanel panel = new JPanel(new GridBagLayout());
        table = new JTable(model);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        panel.add(table, gbc);
        JFrame frame = new JFrame();
        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String args[]) throws Exception {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JTableAndGBC();
            }
        });
    }
}
编辑 1
- JTable,- JScollPane,- JComboBox无法合理返回- PreferredSize,请在编辑中查看我的代码,然后为所有人工作- LayoutManagers,
 
- 仔细注意- table.setPreferredScrollableViewportSize(table.getPreferredSize());,我建议测试 Dimension 是否超载所需的坐标或屏幕分辨率或不超载:-),
 
- 否则收缩- new Dimension(int, int)而不是- table.getPreferredSize()
 
.
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class JTableAndGBC {
    private String[] columnNames = {"Source", "Hit", "Last", "Ur_Diff"};
    private JTable table;
    private Object[][] data = {{"Swing Timer", 2.99, 5, 1.01},
        {"Swing Worker", 7.10, 5, 1.010}, {"TableModelListener", 25.05, 5, 1.01}};
    private DefaultTableModel model = new DefaultTableModel(data, columnNames);
    public JTableAndGBC() {
        JPanel panel = new JPanel(new GridBagLayout());
        table = new JTable(model);
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.weightx = 1.0;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        JScrollPane pane = new JScrollPane(table);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        panel.add(pane, gbc);
        JFrame frame = new JFrame();
        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String args[]) throws Exception {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JTableAndGBC();
            }
        });
    }
}
编辑 2
我强烈建议使用 BorderLayout、GridLayout

.

而不是 GBC ( JTable, JScollPane,JComboBox不能返回合理PreferredSize的, 需要覆盖 GBC, brrrr, 不是为什么要打扰)
 .
.
边框布局代码
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class JTableAndGBC {
    private String[] columnNames = {"Source", "Hit", "Last", "Ur_Diff"};
    private JTable table;
    private Object[][] data = {{"Swing Timer", 2.99, 5, 1.01},
        {"Swing Worker", 7.10, 5, 1.010}, {"TableModelListener", 25.05, 5, 1.01}};
    private DefaultTableModel model = new DefaultTableModel(data, columnNames);
    public JTableAndGBC() {
        JPanel panel = new JPanel(new BorderLayout()/*(new GridBagLayout()*/);
        table = new JTable(model);
        //GridBagConstraints gbc = new GridBagConstraints();
        //gbc.weightx = 1.0;
        //gbc.fill = GridBagConstraints.HORIZONTAL;
        JScrollPane pane = new JScrollPane(table, 
                ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        /*TableColumn firstColumn = table.getColumnModel().getColumn(0);
        firstColumn.setMinWidth(150);
        firstColumn.setMaxWidth(200);
        TableColumn secondColumn = table.getColumnModel().getColumn(1);
        secondColumn.setMinWidth(200);
        secondColumn.setMaxWidth(250);
        TableColumn thirdColumn = table.getColumnModel().getColumn(1);
        thirdColumn.setMinWidth(50);
        thirdColumn.setMaxWidth(100);   */     
        table.setRowHeight(30);
        table.setPreferredScrollableViewportSize(table.getPreferredSize());
        panel.add(pane/*, gbc*/);
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(panel, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
    }
    public static void main(String args[]) throws Exception {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JTableAndGBC();
            }
        });
    }
}