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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как в JTable сделать некоторые строки др. цветом 
:(
    Опции темы
Adept
Дата 27.5.2005, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург

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



как в JTable сделать некоторые строки другим цветом. Например 1-ю и 3-ю.
Покажите на примере плиз.
PM MAIL   Вверх
AntonSaburov
Дата 27.5.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



Ну вот самый просто вариант - переопределить метод для рендеринга ячейки. Можно сложнее и гибче, но это надо переопределять уже сам рендерер

Код

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

public class Focus extends JFrame
{
  public Focus()
  {
    MyTable my = new MyTable(5,5);
    getContentPane().add(new JScrollPane(my));
    setBounds(100,100,500,500);
  }

  public static void main(String[] args)
  {
    Focus my = new Focus();
    my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    my.setVisible(true);
  }
}

class MyTable extends JTable
{
  public MyTable(int rows, int columns)
  {
    super(rows, columns);
  }

  public Component prepareRenderer(TableCellRenderer renderer,
                                   int row, int column)
  {
    Component cmp = super.prepareRenderer(renderer, row, column);

    if(row%2==0) {
      cmp.setBackground(Color.red);
    }
    else {
      cmp.setBackground(Color.blue);
    }
    return cmp;
  }
}

PM MAIL WWW ICQ   Вверх
Adept
Дата 30.5.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург

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



Спасибо работает.
А если переопределять рендерер это так?
Код

public class ColorTableCellRenderer extends DefaultTableCellRenderer{
    public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,
                      boolean hasFocus, int row, int column){
        if(row==1){
           setBackground(Color.BLUE);

        }
        return this;
    }

}



PM MAIL   Вверх
AntonSaburov
Дата 30.5.2005, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 10
Всего: 118



Совершенно верно.
Только потом для таблицы надо сделать

Код

setRenderer(new ColorTablecelllrenderer());


PM MAIL WWW ICQ   Вверх
Adept
Дата 30.5.2005, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург

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



setRenderer нету, есть setDefaultRenderer(Class<?> columnClass, TableCellRenderer renderer)
Я сделал так
Код

this.addWindowListener(new WindowAdapter() {
            public void windowOpened(WindowEvent e) {
               queryResults("select * from zapPriem");
               sorterTableModel.sort(0);
               table.setDefaultRenderer(Color.class,new ColorTableCellRenderer());

            }
        });

так неработает,подскажи чего нетак.
PM MAIL   Вверх
batigoal
Дата 30.5.2005, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



Скорее всего, дело в том, что рендерер должен устанавливаться ДО того, как ты открываешь окно. А то он уже нарисовался, а только потом ты пытаешься применить новый способ отрисовки.
Или просто repaint сделать.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Adept
Дата 30.5.2005, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург

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



пробывал слудующей строчкой писать table.repaint();
непомогло
PM MAIL   Вверх
batigoal
Дата 30.5.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 7
Всего: 151



Попробуй поставить setDefaultRenderer до того места, где ты делаешь add(table).


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Adept
Дата 31.5.2005, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург

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



Неработает. Вот сам код примера
Код

package focus;
import javax.swing.*;
import java.awt.*;
public class Focus extends JFrame{
  public Focus(){
    JTable table = new JTable(5,5);
    table.setDefaultRenderer(Color.class,new ColorTableCellRenderer());
    //table.repaint();
    getContentPane().add(new JScrollPane(table));
    setBounds(100,100,500,500);
  }

  public static void main(String[] args){
    Focus my = new Focus();
    my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    my.setVisible(true);
  }
}

а вот переопределенный метод рендерера
Код

package focus;
import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import java.awt.*;

public class ColorTableCellRenderer extends DefaultTableCellRenderer{
    public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,
                      boolean hasFocus, int row, int column){
        if(row==1){
           setBackground(Color.BLUE);
        }
        return this;
    }
}

PM MAIL   Вверх
Domestic Cat
Дата 31.5.2005, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 13
Всего: 172



Может, проще будет разобраться с сановским туториалом?
http://java.sun.com/docs/books/tutorial/ui...e.html#renderer


--------------------

PM   Вверх
Guest
Дата 31.5.2005, 10:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Класс в Табле рендерере это класс возврящаемого значения.
Чтобы применялось ко всем можно добавить для Object.class.
  Вверх
DarkDS
Дата 31.5.2005, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 4
Всего: 16



Последнее было от меня
PM MAIL   Вверх
igon
Дата 1.6.2005, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 7
Всего: 21



Код

setBackground(Color.BLUE) 
нужно, ИМХО, делать для value, примерно так
Код

  Component myValue = (Component) value;
  if(row==1){
           myValue.setBackground(Color.BLUE);
        }
        return myValue;


И вместо
Код

table.setDefaultRenderer(Color.class,new ColorTableCellRenderer());

лучше написать, как рекомендует DarkDS
Код

table.setDefaultRenderer(Object.class,new ColorTableCellRenderer());

Если, конечно, типы столбцов твоей таблицы не Color smile




--------------------
Хотите поговорить об этом?
PM   Вверх
Adept
Дата 1.6.2005, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург

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



Всем спасиба, с помощью вас сделал так
Код

public class ColorTableCellRenderer extends JLabel implements TableCellRenderer{
    public ColorTableCellRenderer() {
           setOpaque(true); //MUST do this for background to show up.
    }

    public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected,
                      boolean hasFocus, int row, int column){
          
          if(row==1) {
             setBackground(Color.blue
           }
           else {
             setBackground(Color.white);
           }
           return this;

    }

}


и тут как сказали
Код

table.setDefaultRenderer(Object.class,new ColorTableCellRenderer());



Все работает
PM MAIL   Вверх
Adept
Дата 1.6.2005, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 10.7.2003
Где: Санкт-Петербург

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



точнее невсе smile
теперь данные в таблице невидны, я же вроде только Background изменил.
Буду разбиратся.
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.0652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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