How to get rid of the border with a JTable / JScrollPane

匿名 (未验证) 提交于 2019-12-03 02:50:02

问题:

If you run the small sample below you'll see a border around the center region. I'm not sure why this border is showing.

It happens when a JTable is in a JScrollPane. I tried various things to remove it but so far no luck. A JTable without the JScrollPane shows no border.

See sample below. 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));     } } 

回答1:

Use BorderFactory.createEmptyBorder() instead of null...

by using:

sp.setBorder(createEmptyBorder()); 

it works.

Your main method becomes:

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); } 


回答2:

I was looking for the answer for the same question but above answers could not do... so I found a better answer:

JScrollPane jsp = new JScrollPane();  //ur other codes  jsp.setViewportBorder(null); 


回答3:

Interestingly the border disappears when you remove this line:

sp.setBorder(null); 


回答4:

I think the proper fix is to set the border on the viewportView to 'null'.



回答5:

For JTable table.setIntercellSpacing(new Dimension(0, 0)) works.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!