GridBagLayout和JScrollPane:如何减少行高?

请参阅下面一个使用GridBagLayout的简单测试代码(第2行有2行,第2行,第1行有1个组件)。 虽然我已经指定第一行的weighty为0.01,第二行的weighty为1,但屏幕上的比率看起来更像是0.3和0.7。 似乎第一行的高度resize,以便整个textarea适合它。

如何减小第一行的高度,以便显示JScrollPane的滚动条?

 public class Test { public static void main(String... args) { String text = "text\n\n\n\n\n\n\n\ntext"; JFrame frame = new JFrame(); JTextArea area; JScrollPane pane; JPanel desktop = new JPanel(new GridBagLayout()); GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 0; c.gridy = 0; c.weightx = 0.25; c.weighty = 0.05; area = new JTextArea(text); area.setBackground(Color.RED); pane = new JScrollPane(area); desktop.add(pane, c); c.gridx = 1; c.gridy = 0; c.weightx = 0.75; c.weighty = 0.05; area = new JTextArea(text); area.setBackground(Color.BLUE); pane = new JScrollPane(area); desktop.add(pane, c); c.fill = GridBagConstraints.BOTH; c.gridx = 0; c.gridy = 1; c.weightx = 0; c.weighty = 1; c.gridwidth = 2; area = new JTextArea(text); area.setBackground(Color.GREEN); pane = new JScrollPane(area); desktop.add(pane, c); frame.setContentPane(desktop); frame.setPreferredSize(new Dimension(800, 600)); frame.pack(); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); frame.setVisible(true); } } 

设置JTextArea上的行数,以便textarea和scrollpane的preferredSize将调整为该行数。 如果textarea文本中的行数过多,则会出现滚动条。

weight – 指定如何分配额外的垂直空间。 因此,如果可用空间大于优选大小的总和,则根据权重值分配额外的像素。