web-dev-qa-db-fra.com

Comment se débarrasser de la frontière 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 s'affiche.

Cela se produit lorsqu'un JTable se trouve dans un JScrollPane. J'ai essayé différentes choses pour l'enlever mais jusqu'à présent, pas de chance. Une JTable sans JScrollPane ne montre 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));
    }
}
36
sproketboy

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

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

JScrollPane jsp = new JScrollPane();

//ur other codes

jsp.setViewportBorder(null);
6
Krishna Gupta

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

sp.setBorder(null);
5
Guillaume

Je pense que le correctif correct consiste à définir la bordure sur viewportView sur "null".

0
RSC

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

0
Gaurav vijayvargiya