【发布时间】:2011-10-07 12:25:29
【问题描述】:
我正在尝试将多个 JLists 放在 JPanel 中,并将 JPanel 放在 JScrollPane 中。问题是当我将 JScrollPane 添加到等式时,JList 和外边框之间有一个空格,我该如何摆脱这个边框,使其水平填充?
这里有一个小示例代码,用 JLabel 而不是 JList 演示了这个问题。
/edit:这似乎是 windows 的东西,它在 Mac OS 上运行良好。
import java.awt.*;
import javax.swing.*;
public class Test extends JFrame
{
public static void main(String[] args)
{
Test test = new Test();
}
public Test()
{
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setContentPane(contentPane);
this.setMinimumSize(new Dimension(400, 300));
JScrollPane sp = new JScrollPane(createLeftPane());
sp.setBorder(BorderFactory.createLineBorder(Color.yellow));
this.add(sp, BorderLayout.WEST);
LookAndFeel.installBorder(sp, "BorderFactory.createEmptyBorder()");
StackTraceElement[] st = Thread.currentThread().getStackTrace();
for(int i = 0; i < st.length; i++) {
System.out.println(st[i]);
}
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
private JPanel createLeftPane()
{
JPanel panel = new JPanel();
panel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
JLabel label = new JLabel("TEST LABEL");
label.setBorder(BorderFactory.createLineBorder(Color.blue));
panel.add(label, c);
panel.setBorder(BorderFactory.createLineBorder(Color.red));
return panel;
}
}
这是一个屏幕截图(第一个没有滚动窗格)
堆栈跟踪:
java.lang.Thread.getStackTrace(Thread.java:1479)
test.Test.<init>(Test.java:27)
test.Test.main(Test.java:10)
/edit:经过反复试验,我发现当我将 c.weightx = 0.5 添加到约束时,它确实会水平填充,但是当 scrollPane 变得大于其内容时,它会使自身变宽,这很奇怪。请参阅下面的屏幕截图:
【问题讨论】:
-
+1 用于发布 SSCCE。可以加个截图吗?
标签: java swing border jpanel jscrollpane