Alexandre Andris (Santerne.fr) wrote:

Bonjour a tous,

pouvez vous m'indiquer le moyen le plus simple de colorier
une ligne enti�re dans une JTable (Background ou Foreground),
sachant que mon model de JTable extends AbstractTableModel.

Merci d'avance - Alexandre


Il faut utiliser un renderer (TableCellRenderer), voila un exemple :

import java.awt.*;

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.table.AbstractTableModel;

public class MyTableModel3 extends AbstractTableModel {

 public MyTableModel3(String[] array) {
   this.array=array;
 }

 public int getColumnCount() {
   return 3;
 }

 public int getRowCount() {
   return array.length;
 }

 public String getColumnName(int column) {
   return columnNames[column];
 }

public Object getValueAt(int row, int column) {
switch(column) {
case 0:
return array[row];
case 1:
return new Integer(array[row].length());
case 2:
return new Integer(array[row].indexOf('a'));
}
throw new IllegalArgumentException("invalid column ("+row+','+column+')');
}


 private String[] array;
 private final static String[] columnNames={
   "Text","Length","Index of 'a'"
 };

public static void main(String[] args) {
MyTableModel3 model=new MyTableModel3(args);
final TableCellRenderer renderer=new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table,
Object value,boolean isSelected,boolean hasFocus,int row,int column) {
JLabel label=(JLabel)super.getTableCellRendererComponent(table,
value,isSelected,hasFocus,row,column);
if (!isSelected)
label.setBackground((row%2==0)?Color.RED:Color.BLUE);
return label;
}
};
JTable table=new JTable(model) {
public TableCellRenderer getCellRenderer(int row, int column) {
return renderer;
}
};
JScrollPane pane=new JScrollPane(table);
final JFrame frame=new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(pane);
frame.setSize(400,300);
frame.show();
}
}


Remi Forax



Répondre à