Comment se débarrasser de la bordure avec un JTable / JScrollPane

Si vous exécutez le petit échantillon ci-dessous, vous verrez une bordure autour de la région centrale. Je ne sais pas pourquoi cette frontière apparaît.

Cela arrive quand un JTable est dans un JScrollPane. J'ai essayé diverses choses pour l'enlever mais jusqu'à présent pas de chance. Un JTable sans JScrollPane n'affiche aucune bordure.

Voir l'exemple ci-dessous. 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));
    }
}
34
demandé sur almightyGOSU 2010-07-26 13:30:05

5 réponses

Utilisez BorderFactory.createEmptyBorder () au lieu de null...

En utilisant:

sp.setBorder(createEmptyBorder());

Ça marche.

Votre méthode principale devient:

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);
}
54
répondu sly7_7 2010-07-26 09:40:31

Je cherchais la réponse à la même question mais les réponses ci-dessus ne pouvaient pas faire... j'ai donc trouvé une meilleure réponse:

JScrollPane jsp = new JScrollPane();

//ur other codes

jsp.setViewportBorder(null);
5
répondu Krishna Gupta 2013-06-01 13:35:14

Fait intéressant, la bordure disparaît lorsque vous supprimez cette ligne:

sp.setBorder(null);
4
répondu Guillaume 2010-07-26 09:38:33

Je pense que le correctif approprié est de définir la bordure sur viewportView à 'null'.

0
répondu RSC 2010-08-19 18:36:26

Pour JTable table.setIntercellSpacing(new Dimension(0, 0)) fonctionne.

0
répondu Gaurav vijayvargiya 2015-09-29 19:45:29