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

Тема в разделе "Java", создана пользователем Afreet, 9 авг 2006.

Статус темы:
Закрыта.
  1. Afreet

    Afreet Гость

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

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

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

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

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

    Вложения:

    • JTable.gif
      JTable.gif
      Размер файла:
      5,7 КБ
      Просмотров:
      123
  2. 13-

    13- Гость

    Обьявсяем внутренный класс...
    Код (Text):
    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;
    }
    }
    ну а дальше уж подключаешь как те нуна
    Код (Text):
    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;
    }
     
  3. Afreet

    Afreet Гость

    Сделал так ...
    Код (Text):
    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. Надеюсь тема для кого-нибудь будет полезной! :)
     

    Вложения:

Загрузка...
Похожие Темы - Вопрос по компоненту
  1. ApplePen
    Ответов:
    0
    Просмотров:
    52
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    90
  3. kartaman
    Ответов:
    0
    Просмотров:
    124
  4. Peter
    Ответов:
    4
    Просмотров:
    517
  5. di0d_
    Ответов:
    1
    Просмотров:
    432
Статус темы:
Закрыта.

Поделиться этой страницей