Hello I have a simple JTable, there are six columns that matter have header described in Table Model:
private final String[] columNames = new String[]{"Id","TicketID","PolicyNo","Remarks 1","Hourly Rate","Part Time","Validate 1"};
I need to validate each time user enters 3 digits that must be equal based on last 3 digits value from Column (2). Please see the picture below
this is my code
private final DefaultTableCellRenderer renderer = new TabelaCellRenderer();
/**
* Creates new form EditableTableExample
*/
public EditableTableExample() {
initComponents();
setLocationRelativeTo(null);
setTitle("Editable Table Example");
initTable();
}
private void initTable(){
DocsDetail row1 = new DocsDetail(1, "1216266","19889086","", 100.0, true,0);
DocsDetail row2 = new DocsDetail(1, "1216266","33350761","", 100.0, false,0);
DocsDetail row3 = new DocsDetail(1, "1216266","22780770","", 100.0, true,0);
DocsDetail row4 = new DocsDetail(1, "1216266","57611607","", 100.0, false,0);
DocsDetail row5 = new DocsDetail(1, "1216266","72914755","", 100.0, true,0);
//build the list
List<DocsDetail> employeeList = new ArrayList<>();
employeeList.add(row1);
employeeList.add(row2);
employeeList.add(row3);
employeeList.add(row4);
employeeList.add(row5);
//create the model
DocsDetailTabelModel model = new DocsDetailTabelModel(employeeList);
//create the table
tableEx.setModel(model);
tableEx.setRowSorter(new TableRowSorter(model));
//tableEx.setDefaultRenderer(Object.class, renderer);
//tableEx.getColumnModel().getColumn(6).setCellEditor(new IntegerEditor(0, 1000));
}
private class TabelaCellRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable jtable, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(jtable, value, isSelected, hasFocus, row, column);
String nopolis = "";
int lastDigits = 0;
int modelRow = jtable.convertRowIndexToView(row);
jtable.convertRowIndexToView(row);
nopolis = jtable.getModel().getValueAt(modelRow, 2).toString();
lastDigits = Integer.parseInt(nopolis.substring(nopolis.length() - 3));
if (column == 6) {
if(!value.equals(0)){
System.out.println("lastDigits: "+lastDigits);
if (value.equals(lastDigits)) {
jtable.setCellSelectionEnabled(true);
setFont(getFont().deriveFont(Font.BOLD));
} else {
jtable.setCellSelectionEnabled(false);
setFont(getFont().deriveFont(Font.PLAIN));
}
}
}else {
setForeground(Color.black);
setFont(getFont().deriveFont(Font.PLAIN));
}
return this;
}
}
Looks pretty simple(or not simple hehe). Except that I have no idea what event should I look for. Something like "cell value changed"? or Cell Validator or Cell Renderer, i already try those methods but i did not find solution for my case ;( Anyway, before I come up with some weird noobish solution I thought I might ask here what's the proper way to do it :)