Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jTable подсветка строки 
V
    Опции темы
Ak47black
  Дата 19.4.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Здравствуйте.
Хочу спросить как грамотно реализовать.
Есть следующий код набросок
Код

            rs = st.executeQuery("SELECT ID FROM vido7974.LateKlients");
            DefaultTableModel model = (DefaultTableModel)klientsTable.getModel();
            while (rs.next()) {
                for (int i = 0; i < klientuTable.getRowCount(); i++)
                {
                    String klientID = (String)( model.getValueAt(i, model.findColumn("Klient ID") ));
                    if (klientID .equals(rs.getString(1)))
                    {
                        //тут нужно реализовать код подсветки i-ой строки
                    }
                }

            }

который получает список опаздывающих клиентов(одну колонку ID номеров), смотрит есть-ли в таблице(JTable) такие-же ID клиентов. И если такие есть то подсвечивает их красным цветом.
При переборе я делаю следующий код
Код

String klientID = (String)( model.getValueAt(i, model.findColumn("Klient ID") ));

чтобы избежать ошибки в случае если пользователь поменяет колонки местами. Хотел-бы узнать если полегче способ это сделать?
И как подсветить выбранную строку?

Это сообщение отредактировал(а) Ak47black - 19.4.2010, 19:36
PM MAIL   Вверх
dorogoyIV
Дата 19.4.2010, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import java.util.*;

public class ColorRow extends JFrame
{
 JTable table = new JTable(10, 5);

 public ColorRow()
 {
  add(new JScrollPane(table));

  MyRenderer renderer = new MyRenderer();

  for(int i = 0; i < table.getColumnCount(); i++)
   table.getColumnModel().getColumn(i).setCellRenderer(renderer);

  Vector <Integer> v = new Vector <Integer> ();

  for(int i = 0; i < table.getRowCount(); i++)
   for(int j = 0; j < table.getColumnCount(); j++)
   {
    table.setValueAt((i + 1) * (j + 1), i, j);

    //////////////////////////////////////////
    if((i + 1) % 3 == 0) // здесь твое условие
     v.add(i);
    //////////////////////////////////////////
   }

  renderer.setColoredRows(v);
 }

 public static void main(String [] args)
 {
  JFrame f = new ColorRow();
  f.setBounds(100, 100, 400, 300);
  f.setDefaultCloseOperation(3);
  f.setVisible(true);
 }
}

class MyRenderer extends JLabel
                 implements TableCellRenderer
{
 Vector <Integer> v;

 public void setColoredRows(Vector <Integer> v)
 {
  this.v = v;
 }

 public Component getTableCellRendererComponent(JTable table, Object value,
                     boolean isSelected, boolean hasFocus, int row, int column)
 {
  setOpaque(true);
  setFont(new Font("Serif", Font.PLAIN, 12));
  setText(value != null ? value.toString() : "");

  if(table.getSelectedRow() == row && table.getSelectedColumn() == column)
   setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.RED));
  else
   setBorder(null);

  if(v.contains(row))
   setBackground(Color.PINK);
  else
   setBackground(null);

  return this;
 }
}

PM MAIL   Вверх
Ak47black
Дата 19.4.2010, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



А может быть покороче есть что-нибудь, мне-же нужно всеволишь пометить некоторые строки.
PM MAIL   Вверх
dorogoyIV
Дата 19.4.2010, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



 smile  да это с первого взляда код такой длинный. тебе нужно только рендерер добавить, остальное у тебя уже написано  smile 
PM MAIL   Вверх
Ak47black
Дата 19.4.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

Репутация: нет
Всего: 0



Вот чтото похожее вышло с другово источника, но нетакое страшное в размере  smile 
Код

Table.setDefaultRenderer(Object.class, new CustomRenderer());

    class CustomRenderer extends DefaultTableCellRenderer
    {
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
            Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            if (isSelected) return c;
            if (laterows.contains(row))
                c.setBackground(Color.red); else c.setBackground(Color.white);
            return c;
        }
    }

где laterows - вектор<int>.
Проблема решена.
PM MAIL   Вверх
dorogoyIV
Дата 24.4.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Цитата(Ak47black @  19.4.2010,  22:47 Найти цитируемый пост)
но нетакое страшное в размере

 smile 
ну, напишите маленькую игрушку, тогда для вас 15 строк рендерера не будут ничего значить  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.