我想要的只是一个Label和一个JScrollBar。滚动条甚至不应该有任何功能。我还希望滑块比标签宽一点。
例如:如果标签为10像素宽,则JscrollBar应该为20像素宽。两者都应该居中。
我知道,仅使用preferredSizes或固定大小是不好的。因此,我想避免这种情况,并尝试使用GridBagLayout。
不幸的是我的滚动条无法正常拉伸。到目前为止,这是我的代码。
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));
}
}
最佳答案
问题是,如果将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);