J'utilise le code suivant pour définir la couleur alternative de la ligne de fond dans un jtable:Impossible de définir la couleur d'arrière-plan personnalisé dans jtable
table = new JTable(model);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{//alternate background color for rows
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (!isSelected)
c.setBackground(row % 2 == 0 ? Color.white : Color.lightGray);
return c;
};
});
Et il fonctionne. Cependant, je voudrais utiliser une couleur personnalisée dire rgb (242.242.242) à la place de GrisClair comme la couleur alternative, mais en faisant:
final Color alternateColor = new Color (242,242,242);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{//alternate background color for rows
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (!isSelected)
c.setBackground(row % 2 == 0 ? Color.white : alternateColor);
return c;
};
});
la couleur alternative est complètement ignorée et toutes les lignes ont un fond blanc. Il semble que cette méthode ne fonctionne qu'avec les couleurs appartenant à l'énumération des couleurs. Comment vient?
Voici un exemple de travail complet suivi de l'écran résultant:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
public class Test extends JFrame
{
private JTable table = null;
private Object[] columnTitle = { "Column1", "Column2", "Column3" };
private Object[][] data = null;
private DefaultTableModel model = null;
private JPanel panel = null;
private JScrollPane scroller = null;
public Test()
{
super();
setLayout(new BorderLayout());
panel = new JPanel();
scroller=new JScrollPane();
data = new Object[3][3];
for (int i=0; i<3; i++)
{
for (int j=0; j<3; j++)
{
data [i][j]="Test";
}
}
model = new DefaultTableModel(data, columnTitle);
table = new JTable(model);
final Color alternateColor=new Color(242,242,242);
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
{//alternate background color for rows
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column)
{
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (!isSelected)
c.setBackground(row % 2 == 0 ? Color.white : alternateColor);
return c;
};
});
scroller.setViewportView(table);
panel.add(scroller);
this.add(panel, BorderLayout.CENTER);
}
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
Test test = new Test();
test.setLocationRelativeTo(null);
test.pack();
test.setVisible(true);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
}
Et voici l'écran avec Color.lightGray:
Non, ça marche très bien pour moi. Envisagez de fournir un [exemple exécutable] (https://stackoverflow.com/help/mcve) qui illustre votre problème. Cela se traduira par moins de confusion et de meilleures réponses – MadProgrammer
Eh bien, si cela fonctionne pour vous, c'est probablement lié à la LAF que j'utilise qui est Weblaf. Je ne vois aucune autre raison possible ... – Zek101
Mais le premier exemple fonctionne avec weblaf? – MadProgrammer