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));
}
}
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);
}
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);
Fait intéressant, la bordure disparaît lorsque vous supprimez cette ligne:
sp.setBorder(null);
Je pense que le correctif approprié est de définir la bordure sur viewportView à 'null'.
Pour JTable table.setIntercellSpacing(new Dimension(0, 0))
fonctionne.