1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| public class JTableRendererDemo {
public static void main(String[] args) {
JFrame frame = new JFrame("Démo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(createTable()));
frame.setSize(600, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static JTable createTable() {
TableModel model = new AbstractTableModel() {
Object[][] data = {
{ 1, "abc", "def", "ghi" },
{ 2, null, null, null },
{ 3, null, "def", "ghi" }
};
String[] columns = { "id", "A", "B", "C" };
@Override
public String getColumnName(int col) {
return columns[col];
}
@Override
public boolean isCellEditable(int row, int col) {
return col>0;
}
@Override
public Class<?> getColumnClass(int col) {
switch(col) {
case 0:
return Integer.class;
default:
return String.class;
}
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public Object getValueAt(int row, int col) {
return data[row][col];
}
@Override
public void setValueAt(Object value, int row, int col) {
data[row][col]=value;
}
};
JTable table = new JTable(model);
TableColumn column = table.getColumnModel().getColumn(2);
column.setCellRenderer(new BorderTableCellRenderer(table.getDefaultRenderer(String.class)));
return table;
}
private static class BorderTableCellRenderer implements TableCellRenderer {
private final static Border BORDER = BorderFactory.createLineBorder(Color.RED, 2);
private TableCellRenderer renderer;
public BorderTableCellRenderer(TableCellRenderer renderer) {
this.renderer=renderer;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
JComponent component = (JComponent)renderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
boolean isnull=true;
for(int i=1; i<4; i++) {
String valueCol = (String) table.getValueAt(row, i);
if ( valueCol!=null && !valueCol.trim().isEmpty() ) {
isnull=false;
break;
}
}
if ( isnull ) {
if ( !hasFocus ) {
component.setBorder(BORDER);
}
else {
component.setBorder(BorderFactory.createCompoundBorder(component.getBorder(), BORDER));
}
}
return component;
}
}
} |
Partager