Я пытаюсь поместить несколько JList в 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 становится больше, чем его содержимое, оно делает себя шире, что странно.Смотрите скриншоты ниже: