JScrollBar无法在GridBagLayout中正确伸展

时间:2014-09-17 15:28:50

标签: java jscrollpane gridbaglayout stretch jscrollbar

我想要的只是一个Label和一个JScrollBar。滚动条甚至不应该有任何功能。我还希望滑块比标签宽一点。 例如:如果标签宽度为10像素,则JscrollBar应为20像素宽。两者都应该集中。 我知道,使用preferredSizes或固定尺寸并不好。所以我想避免这种情况,并尝试使用GridBagLayout。

不幸的是我的scollbar无法正常伸展。到目前为止,这是我的代码。

package kapitel13;

import javax.swing.*;

import java.awt.*;
public class übung7 extends JFrame {
  public übung7(String titel) {
    super(titel);
    setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();

    JLabel label = new JLabel("Lautstärke"); // means volume
    gbc.gridx=2;
    gbc.gridy=1;
    gbc.gridwidth=3;
    //gbc.insets = new Insets(10, 10, 10, 10);
    add(label, gbc);

    JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
    gbc.gridx=2;
    gbc.gridy=2;
    gbc.gridwidth=23;
    gbc.fill = GridBagConstraints.BOTH;
    add(scrollBar, gbc);

    /*
    JButton btn = new JButton("Button1");
    gbc.gridx=3;
    gbc.gridy=3;
    gbc.weightx=1;
    gbc.gridwidth=3;
    gbc.fill = GridBagConstraints.BOTH;
    add(btn, gbc);
    */
  }
  public static void main(String[] args) {
    übung7 win = new übung7("Win");
    win.pack();
    win.setVisible(true);
    win.setSize(new Dimension(500,500));
  }

}

1 个答案:

答案 0 :(得分:2)

问题在于,如果您为滚动条增大 gridWidth ,它不会比标签大,因为标签的左侧或右侧没有项目。所有细胞都被压扁为零像素。如果您在其中放置一些空标签应该可以工作:

JLabel label = new JLabel("                            "); 
gbc.gridx=1;
gbc.gridy=1;
gbc.gridwidth=1;
add(label, gbc);


JLabel label2 = new JLabel("Lautstärke"); // means volume
gbc.gridx=2;
gbc.gridy=1;
gbc.gridwidth=1;
add(label2, gbc);


JLabel label3 = new JLabel("                             "); 
gbc.gridx=3;
gbc.gridy=1;
gbc.gridwidth=1;
add(label3, gbc);


JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
gbc.gridx=1;
gbc.gridy=2;
gbc.gridwidth=3;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(scrollBar, gbc);

或者,您可以使用权重。这也应该拉伸滚动条:

JLabel label2 = new JLabel("Lautstärke"); // means volume
gbc.gridx=2;
gbc.gridy=1;
gbc.gridwidth=1;
gbc.weightx=1;
add(label2, gbc);

JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
gbc.gridx=1;
gbc.gridy=2;
gbc.gridwidth=3;
gbc.weightx=1;
gbc.fill = GridBagConstraints.HORIZONTAL;
add(scrollBar, gbc);

enter image description here