/ / Как да се отървем от границата с JTable / JScrollPane - java, swing, jtable, jscrollpane

Как да се отървете от границата с JTable / JScrollPane - java, swing, jtable, jscrollpane

Ако пуснете малката проба под вас, ще видите граница около централния регион. Не съм сигурен защо тази граница се показва.

Случва се, когато JTable е в JScrollPane. Опитах различни неща, за да го премахна, но засега няма късмет. JTable без JScrollPane не показва граница.

Вижте пример по-долу. TIA.

public class TestScrollPane extends JFrame {

public static void main(String[] args) {
JFrame frame = new TestScrollPane();
JPanel panel = new JPanel();
JTable table = new JTable();

panel.setLayout(new BorderLayout());
panel.add(new JLabel("NORTH"), BorderLayout.NORTH);
panel.add(new JLabel("SOUTH"), BorderLayout.SOUTH);

JScrollPane sp = new JScrollPane(table);
// None of these have any effect
sp.setBorder(null);
sp.getInsets().set(0, 0, 0, 0);
sp.setViewportBorder(null);
sp.getViewport().setBorder(null);
sp.getViewport().getInsets().set(0, 0, 0, 0);
sp.getViewport().setOpaque(true);

panel.add(sp, BorderLayout.CENTER);
// Adding the table alone shows no border
// panel.add(table, BorderLayout.CENTER);
frame.add(panel);

frame.setVisible(true);
}

public TestScrollPane() throws HeadlessException {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setMinimumSize(new Dimension(100, 100));
}
}

Отговори:

53 за отговор № 1

Използвайте BorderFactory.createEmptyBorder () вместо null ...

като се използва:

sp.setBorder(createEmptyBorder());

работи.

Вашият основен метод става:

public static void main(String[] args) {
JFrame frame = new TestScrollPane();
JPanel panel = new JPanel();
JTable table = new JTable();

panel.setLayout(new BorderLayout());
panel.add(new JLabel("NORTH"), BorderLayout.NORTH);
panel.add(new JLabel("SOUTH"), BorderLayout.SOUTH);

JScrollPane sp = new JScrollPane(table);
sp.setBorder(BorderFactory.createEmptyBorder());
panel.add(sp, BorderLayout.CENTER);
frame.add(panel);

frame.setVisible(true);
}

5 за отговор № 2

Търсех отговора на същия въпрос, но по-горе отговорите не можах да направя ... затова намерих по-добър отговор:

JScrollPane jsp = new JScrollPane();

//ur other codes

jsp.setViewportBorder(null);

4 за отговор № 3

Интересно е, че границата изчезва, когато премахнете този ред:

sp.setBorder(null);

0 за отговор № 4

Мисля, че правилното поправяне е да зададете границата на viewportView на "null".


0 за отговор № 5

За JTable table.setIntercellSpacing(new Dimension(0, 0)) върши работа.