私はテーブルモデルでは、このコードを持っている:JTableの行の色はモデルのValueによって異なりますか?
public class DocumentProjectTableModel extends AbstractTableModel{
private List<MyDocument> myDocuments;
public String getValueAt(int row, int column) {
String toReturn = null;
MyDocument myDocument = myDocuments.get(row);
SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy");
switch (column) {
case 0:
if(myDocument.getProject().getRegDate()!=null) toReturn = format.format(myDocument.getProject().getRegDate());
break;
case 1:
toReturn = myDocument.getProject().getRegNum();
break;
case 2:
toReturn = myDocument.getProject().getDescription();
break;
case 3:
toReturn = myDocument.getProject().getShortName();
break;
case 4:
toReturn = myDocument.getProject().getSecondName()+myDocument.getProject().getFirstName()+myDocument.getProject().getMiddleName();
break;
}
return toReturn;
}
// some other stuff is not shown
Iは、例えば、それぞれの行の背景色を変更したいmyDocument.getIsValid == false
行がように青色であり、場合myDocument.getIsRegistered() == true
は、私は、この行は、黄色の背景を持っている場合は。
私は、JTableの値に応じて行を再描画する例が見つかりました。しかし、getIsValidとgetIsRegistered()は実際には表示されません。モデルにのみ存在します。アドバイスや例が本当に助けになります。前もって感謝します。
更新。私TableCellRendererを:
public class MyTableCellRenderer extends JLabel implements TableCellRenderer {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
String actualValue = (String) value;
// Set the colors as per the value in the cell...
if(actualValue.equals("lifesucks")){
setBackground(Color.YELLOW);
}
return this;
}
}
使用してレンダラ:
int vColIndex = 0;
TableColumn col = resultTable.getColumnModel().getColumn(vColIndex);
col.setCellRenderer(new MyTableCellRenderer());
resultTable.setModel(new DocumentProjectTableModel(docs));
テーブルは通常の無黄色で示されています。どうして?
update2。
resultTable=new JTable(new DocumentProjectTableModel(docs)){
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
Component c = super.prepareRenderer(renderer, row, column);
// Color row based on a cell value
if (!isRowSelected(row)) {
c.setBackground(getBackground());
int modelRow = convertRowIndexToModel(row);
String type = (String) getModel().getValueAt(modelRow, 0);
c.setBackground(Color.GREEN);
}
return c;
}
};
テーブルは空です:(
レンダラーが使用されていない可能性があります。これは、列単位で設定され、モデルを設定します。 defaulによって、列はsetModel上に再作成されます(または、structureChangedを受け取る)ので、すべての設定を失います – kleopatra
指摘していただきありがとうございます。しかし、私はレンダラーを呼び出しますか? – bunnyjesse112