代码之家  ›  专栏  ›  技术社区  ›  sproketboy

如何使用jtable/jscrollpane清除边框

  •  35
  • sproketboy  · 技术社区  · 14 年前

    如果运行下面的小样本,您将看到围绕中心区域的边界。我不知道为什么会出现这个边界。

    当jtable在jscrollpane中时会发生这种情况。我尝试了各种方法来移除它,但到目前为止还没有运气。没有jscrollpane的jtable不显示边框。

    见下面的示例。短暂性脑缺血发作

    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));
        }
    }
    
    5 回复  |  直到 9 年前
        1
  •  56
  •   sly7_7    14 年前

    使用borderFactory.createEmptyOrder()而不是空值…

    使用:

    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);
    }
    
        2
  •  5
  •   Matt user129975    11 年前

    我在找同一个问题的答案,但上面的答案不能…所以我找到了一个更好的答案:

    JScrollPane jsp = new JScrollPane();
    
    //ur other codes
    
    jsp.setViewportBorder(null);
    
        3
  •  4
  •   Guillaume    14 年前

    有趣的是,删除此行时边框会消失:

    sp.setBorder(null);
    
        4
  •  0
  •   RSC    14 年前

    我认为正确的解决方法是将ViewPortView的边框设置为“空”。

        5
  •  0
  •   Unihedron    9 年前

    为JTAT table.setIntercellSpacing(new Dimension(0, 0)) 作品。