Вопрос по компоненту Jtable

  • Автор темы Afreet
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Afreet

#1
Здравствуйте!

Вопрос состоит в том, как "раскрасить" строки таблицы JTable в зависимости от значения определенного атрибута.

Ситуация такая:
- создается таблица JTable с помощью конструктора JTable(Vector data, Vector columns):
fTable = new JTable(fDataVector, fColumnsNameVector);
- в отдельной нити прослушивается pipe БД Oracle;
- при получении сообщения происходит его обработка/разбор и формирование строки таблицы - вектора aRowVector;
- производится добавление строки и обновление отображения таблицы:
fData.addElement(aRowVector) и fTable.updateUI().

Надо (см. вложение):
1) отображать строки таблицы разным цветом в зависимости от значения атрибута;
2) оставить возможность пользователю выбирать/выделять строку мышкой.

Наглядно то, что должно быть представлено пользователю, изображено на схеме во вложении.
 

Вложения

1
#2
Обьявсяем внутренный класс...
Код:
class MojRenderer1 extends DefaultTableCellRenderer implements TableCellRenderer {

private static final long serialVersionUID = 1L;

public Component getTableCellRendererComponent (JTable table, Object value, boolean selected, 
boolean focused, int row, int column){
Component cell = super.getTableCellRendererComponent (table, value, selected, focused, row, column);
//тута пишешь условия выделения ... у меня первые 10 записей одним цветом остальные другим
if (row >= 10){
cell.setBackground(Color.red);	

}else{
cell.setBackground(Color.green);
}
return cell;
}
}
ну а дальше уж подключаешь как те нуна
Код:
protected JTable CreateTab() {
JTable t = new JTable(tm);
MojRenderer1 tcr = new MojRenderer1();
TableColumn col = t.getColumnModel().getColumn(0);
col.setCellRenderer(tcr);
col = t.getColumnModel().getColumn(1);
col.setCellRenderer(tcr);
col = t.getColumnModel().getColumn(2);
col.setCellRenderer(tcr);
t.addMouseListener(myMouseAdapter);
t.repaint();		
return t;
}
 
A

Afreet

#3
Сделал так ...
Код:
DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(){
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
String lvlcellvalue = table.getValueAt(row, table.getColumnModel().getColumnIndex("Level")).toString();
if(lvlcellvalue.equals("err")){cell.setForeground(Color.RED);}
else if(lvlcellvalue.equals("log")){cell.setForeground(Color.YELLOW);}
else if(lvlcellvalue.equals("msg")){cell.setForeground(Color.GREEN);}
else{cell.setForeground(Color.BLACK);}
return cell;
}
};
for(int i=0; i<fTable.getColumnCount();i++){
fTable.getColumnModel().getColumn(i).setCellRenderer(renderer);
}
Результат во вложении ...

P.S. Надеюсь тема для кого-нибудь будет полезной! :)
 

Вложения

Статус
Закрыто для дальнейших ответов.