我想要的只是一个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));
}
}
答案 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);