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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Раскраска ячеек таблици 
:(
    Опции темы
JulT
Дата 14.12.2005, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем приветики.
Есть табличка, в ней данные, некоторые ячейки могут быть выделены определенным цветом в зависимости от того проверенная ли информация находиться в ней или нет.
Не знаю как мне это реализовать в базе, под каждую ячейку нельзя же заводить поле, которое будет хранить ее цвет, это ж криво как-то.
Как быть.
Спасибо.
PM MAIL   Вверх
LSD
Дата 14.12.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



А на основе чего информация в базе считается проверенной, это некий столбец?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
kashka
Дата 14.12.2005, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2004
Где: Wolfenbuettel, Ge rmany

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



Я делала с помощю TableCellRender.
Код

public class ColorTableCellRender extends DefaultTableCellRenderer {
    private boolean start = false;
    
    public ColorTableCellRender() {
        setOpaque(true); //MUST do this for background to show up.
    }

    
    
    public Component getTableCellRendererComponent(JTable table, Object val, boolean isSelected, boolean hasFocus, int row, int column){
        
        return UtilFunctions.redOrNotred(this, table, val, isSelected, hasFocus, row, column, new Font("DialogInput", Font.ITALIC, 12), Color.black);
        
    }
    
    
    
    
    public boolean isStarted(){
        return start;
    }
    
    public void setStarted(boolean b){
        this.start = b;
    }



}


А функция redOrNotred проверяла ошибка у меня в строке или нет:
Код

public static Component redOrNotred(DefaultTableCellRenderer ren, JTable table, Object val, boolean isSelected, boolean hasFocus, int row, int column, Font font, Color foreGround){
        
        VectorWithVariables vector = ((ITable)table).getVectorWithVariables();
            
        ren.setFont(font);
        ren.setForeground(foreGround);
        
        if(vector.get(row).getClass()== flexRay.Constant.class){
            ren.setText(val.toString());
            return ren;
        }
        
        FlexRayVariable v = (FlexRayVariable) vector.get(row);
        IValue max = v.getMax();
        IValue min = v.getMin();
        IValue value = v.getValue();    
        if((!value.greaterOrEqual(min))||(!value.littleOrEqual(max))){
            ren.setBackground(Color.red);            
        }else{
            ren.setBackground(Color.WHITE);
        }
        if(val != null)//!!!!!
            ren.setText(val.toString());

        return ren;
        
    }

Добавлено @ 19:11
надеюсь поможет smile
PM MAIL   Вверх
JulT
Дата 15.12.2005, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(LSD @ 14.12.2005, 18:08)
А на основе чего информация в базе считается проверенной, это некий столбец?

это не конкретный столбец, любая ячейка может иметь статус не проверенной
не проверенная значит, что там есть информация, которую необходимо уточнить
PM MAIL   Вверх
LSD
Дата 15.12.2005, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Цитата(JulT @ 15.12.2005, 10:05)
это не конкретный столбец, любая ячейка может иметь статус не проверенной
не проверенная значит, что там есть информация, которую необходимо уточнить

Я спрашиваю про критерий определения не проверенности информации. Ведь сами данные в СУБД не имеют атрибута достоверности, это уже наша собственная придумка. Или тебе как раз надо такой критерий придумать и воплотить (как его хранить, заполнять и т.п.)?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
JulT
Дата 15.12.2005, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да, так и нужно сделать, но не знаю как smile
PM MAIL   Вверх
LSD
Дата 15.12.2005, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Можно хранить эти данные в самой таблице, а можно внести во внешнюю. Если непроверенных данных будет мало (не более 1-2% от всех данных), то лучше внешняя таблица. Если много, то лучше в самой таблице хранить и запросы к базе данных будут поменьше.

Какой у тебя случай? И какая СУБД планируется?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
LSD
Дата 15.12.2005, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Да и еще, вся строка может быть непроверенной, или отдельные поля?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
JulT
Дата 16.12.2005, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(LSD @ 15.12.2005, 11:36)
Да и еще, вся строка может быть непроверенной, или отдельные поля?

отдельные поля также могут быть не проверенными.
субд-оракл9i
в принципе может быть многовато, а может инет,это как жизнь покажет пока ничего нельзя сказать
PM MAIL   Вверх
igon
Дата 17.12.2005, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как вариант:
Для столбцов таблицы БД типа Varchar2 можно использовать определенные префиксы, скажем 'GREEN$' для проверенных, 'RED$' - для непроверенных.
В Renderer парсить val: префикс - для фона, остальное показывать.
Для Date и Number, в принципе, тоже "ухитриться" можно.
Возможно, не супер, но число таблиц и столбцов не увеличится.
Более красиво и в духе ООП - объектные типы в БД, но с ними несколько сложнее.


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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



У меня получилось 4 варианта:

Пусть есть исходная таблица:
Код
create table HUMAN
(
  ID          raw(16) default sys_guid() primary key,
  FIRST_NAME  varchar2(50),
  LAST_NAME   varchar2(50)
);


1. Добавить для каждого столбца, еще один дополнительный столбец который будет флагом проверенности данного столбца:
Код
create table HUMAN
(
  ID                raw(16) default sys_guid() primary key,
  FIRST_NAME        varchar2(50),
  FIRST_NAME_FLAG   number(1) default 1,
  LAST_NAME         varchar2(50),
  LAST_NAME_FLAG    number(1) default 1
);

Тут в принципе все очевидно, и как делать выборку и как его заполнять.
Преимущества: реализуем на всех СУБД, позволяет использовать индексы, можно легко добавлять новые столбцы.
Недостатки: существенно увеличивается объем хранимых данных.

2. Добавить еще один дополнительный который будет хранить в себе битовые флаги проверенности столбца:
Код
create table HUMAN
(
  ID          raw(16) default sys_guid() primary key,
  FIRST_NAME  varchar2(50),
  LAST_NAME   varchar2(50),
  FLAGS       number(10) default 0
);

Выборку по данному столбцу, можно делать так:
Код
select * from HUMAN T where bitand(T.FLAGS, 2) = 2;

В данном случае 2 это номер столбца, который является непроверенным.
Преимущества: реализуем на всех СУБД, позволяет использовать индексы (но только на СУБД поддерживающих индексы по функции), можно добавлять новые столбцы.
Недостатки: увеличивается объем хранимых данных, не на всех СУБД можно индексировать поиск, в приложении требуется хранить список столбцов и соответсвующих им номеров.

3. Создать тип вложенная таблица и использовать его для хранения имен столбцов:
Код
create or replace type FLAGS_TYPE as table of varchar2(30);

create table HUMAN
(
  ID          raw(16) default sys_guid() primary key,
  FIRST_NAME  varchar2(50),
  LAST_NAME   varchar2(50),
  FLAGS       FLAGS_TYPE
)
nested table FLAGS store as FLAGS_TYPE_TABLE;

Вставка данных производится следующим образом:
Код
insert into HUMAN (FIRST_NAME, LAST_NAME, FLAGS) values ('Elvis', 'Presley', FLAGS_TYPE('FIRST_NAME', 'LAST_NAME'));
insert into HUMAN (FIRST_NAME, LAST_NAME, FLAGS) values ('John', 'Elton', FLAGS_TYPE('FIRST_NAME'));
insert into HUMAN (FIRST_NAME, LAST_NAME, FLAGS) values ('Louis', 'Armstrong', FLAGS_TYPE('LAST_NAME'));

Запрос на получение списка столбцов для конкретной записи выглядит так:
Код
select * from table(select FLAGS from HUMAN where FIRST_NAME = 'Elvis');

получим
Код
COLUMN_VALUE
------------------------------
FIRST_NAME
LAST_NAME

Запрос на выборку всех строк у которых стобец FIRST_NAME не проверен:
Код
select FIRST_NAME, LAST_NAME, FLAGS from HUMAN T1
  where 'FIRST_NAME' in (select * from table(select FLAGS from HUMAN T2 where T1.ID = T2.ID));

Получим:
Код
FIRST_NAME  LAST_NAME  FLAGS
----------- ---------- -------------------------------------
Elvis       Presley    FLAGS_TYPE('FIRST_NAME', 'LAST_NAME')
Elton       John       FLAGS_TYPE('FIRST_NAME')

Преимущества: можно свободно добавлять и удалять столбцы, расход места минимален, можно хранить неограниченное количество дополнительных аттрибутов.
Недостатки: реализуем только в Oracle, при миграции на другую СУБД надо будет менять логику, запросы к БД усложняются.

4. Тот что сказал igon. Наверно самый правильный с точки зрения ООП, но и самый трудоемкий в реализации.

Если проект не большой, то я бы тебе советовал использовать первый способ. Дополнительный расход места в Oracle будет 2 байта на столбец, мне кажется с этим можно мириться.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
igon
Дата 20.12.2005, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
4. ...самый трудоемкий в реализации.

Хм, а мне nested tables всегда казались интуитивно весьма непрозрачными ...
Вот как (в стиле LSD) будет выглядеть этот вариант:
Код

-- Создаем объектные типы для всех используемых в JTable типов данных
CREATE OR REPLACE TYPE myVarchar2 AS OBJECT
  (currentValue    Varchar2(50),
   isChecked      Number(1)
  );

CREATE OR REPLACE TYPE myNumber AS OBJECT
  (currentValue  Number(10),
   isChecked       Number(1)
  );

create table HUMAN
(
  ID          raw(16) default sys_guid() primary key,
  FIRST_NAME  myVarchar2,
  AGE         myNumber
);

Insert Into HUMAN (FIRST_NAME,AGE)
  Values (myVarchar2('Петя',1),myNumber(25,0));         

Insert Into HUMAN (FIRST_NAME,AGE)
  Values (myVarchar2('Ваня',0),myNumber(31,1));  

Select a.FIRST_NAME.currentValue, a.AGE.currentValue
  From Human a
  Where a.FIRST_NAME.isChecked = 1;

Update Human a
  Set a.first_name.isChecked = 1,
      a.age.isChecked = 1;

Select a.FIRST_NAME.currentValue, a.AGE.currentValue
  From Human a
  Where a.FIRST_NAME.isChecked = 1;      


Как видим, ничего сложного, а для Java-иста - даже хорошо smile



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


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



Цитата(igon @ 20.12.2005, 01:39)
Вот как (в стиле LSD) будет выглядеть этот вариант:
<....>
Как видим, ничего сложного, а для Java-иста - даже хорошо smile

Согласен. Я просто по привычке, хотел доступ к полям реализовывать через методы (в лучших традициях ООП).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0850 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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