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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Иконка в ячейке JTable, почему нельзя вставить объект 
V
    Опции темы
Su_
  Дата 17.6.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Добрый день!

Вопрос как вставить иконку в одну ячейку?

У меня есть свой рендер, но он красит всю строку , как в нем же поставить условие на окраску одной конкретной ячейке(или добавление туда иконки) в известном столбце?

Код


package Jservers;

import java.awt.Color;
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.table.TableCellRenderer;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.border.MatteBorder;

class MultiLineCellRenderer extends JTextArea implements TableCellRenderer {
Border blackline = BorderFactory.createLineBorder(Color.black);
Border raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
Border raisedbevel = BorderFactory.createRaisedBevelBorder();
Border loweredbevel = BorderFactory.createLoweredBevelBorder();
Border empty = BorderFactory.createEmptyBorder();
 public Color newRed = new Color(255, 164, 164);
   public Color newRedAct = new Color(255, 106, 106);
    public Color newBlue = new Color(225, 255, 255);
       public Color newBlueAct = new Color(171, 252, 252);
         public Color lightgreen = new Color(204, 255, 204);
  public MultiLineCellRenderer() {
    setLineWrap(true);
    setWrapStyleWord(true);
    setOpaque(true);
  }
  public Component getTableCellRendererComponent(JTable table, Object value,
      boolean isSelected, boolean hasFocus, int row, int column) {



   String s =  table.getModel().getValueAt(row,8).toString();
       
    setForeground(Color.BLACK);
     if(s.equals("UPDATE"))
     {
         setBackground(Color.YELLOW);
     }else if (s.equals("ALARM"))
     {
      setBackground(newRed);
     }else if (!s.equals("ALARM"))
     {
        setBackground( newBlue);
     }
   setBorder(new EmptyBorder(1, 2, 1, 2));

 if (isSelected)
            {
 setBorder(new MatteBorder(1, 0, 1, 0, Color.DARK_GRAY) );

      if(s.equals("UPDATE"))
     {
         setBackground(Color.ORANGE);
     }else if (s.equals("ALARM"))
     {
      setBackground(newRedAct);
     }else if (!s.equals("ALARM"))
     {
        setBackground( newBlueAct);
     }


  //  setBackground(s.equals("ALARM")? newRedAct: newBlueAct );
   // setForeground(s.equals("ALARM")? Color.BLACK: Color.BLACK);
 
 }


   /* if (isSelected) {
      setForeground(table.getSelectionForeground());
      setBackground(table.getSelectionBackground());
    } else {
      setForeground(table.getForeground());
      setBackground(table.getBackground());
    }*/


  setFont(table.getFont());
  setText((value == null) ? "" : value.toString());


    return this;
  }
}


и почему нельзя сделать например так :

Код

   Object gg =new Object();
  gg = new javax.swing.ImageIcon(getClass().getResource("/pic/47.png"));
  
          JBoard.setValueAt(gg, 1, 9);



--------------------
user posted image

PM MAIL WWW   Вверх
Skipy
Дата 17.6.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

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



У Вас в рендерере есть координаты ячейки (row, column). В чем проблема отрисовать в нужной то, что надо?

Про рендереры вообще можно почитать вот тут: http://skipy-ru.livejournal.com/1577.html


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Su_
Дата 17.6.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Извиняюсь вопрос решен, когда пытался так сделать был включен другой рендер. Тема закрыта., спасибо)


--------------------
user posted image

PM MAIL WWW   Вверх
Su_
Дата 18.6.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно еще один вопрос, косательно добавление иконки в ячейку .

Т.к.  у меня рендер наследует не Jlabel , то и метода setIcon у него нету , 
как бы мне вставить Иконку ? Допустим что JTextArea можно заменить на JtextPane , у которого есть метод  public void insertIcon(Icon g)
но у меня почему то не получилось сделать с помощью него .

Код

insertIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/47.png")));

?

Это сообщение отредактировал(а) Su_ - 18.6.2010, 15:43


--------------------
user posted image

PM MAIL WWW   Вверх
dorogoyIV
Дата 18.6.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



я специально попробовал, короче нужно, что бы высота ячейки была приемлемая... ,
если картинка не влезает в ячейку, то и не отображается
примерно так: ...
Код

class MyRenderer extends JTextPane
                 implements TableCellRenderer
{
 public Component getTableCellRendererComponent(JTable table, Object value,
                      boolean isSelected, boolean hasFocus, int row, int column)
 {
  setText(value != null ? value.toString() : "");
  table.setRowHeight(row, 1000); // высота ячейки/строки
  insertIcon(new ImageIcon("skrin.png"));
  return this;
 }
}

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


Опытный
**


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

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



блин вот в чем беда, а у меня кучу элементов на JFrame , боюсь тронуть Jtable) Спасибо , будет пробовать!))


--------------------
user posted image

PM MAIL WWW   Вверх
Su_
Дата 18.6.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пробовал пробовал, и понял что не так , 
у меня 
Код

 JBoard.setDefaultRenderer(String.class, new MultiLineCellRenderer())


А картинки добавляет, только если
Код

 jTable1.setDefaultRenderer(Object.class, new MyRenderer());


Будем разбираться дальше)



--------------------
user posted image

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


Опытный
**


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

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



Не понимаю почему рендер рисует на всю таблицу, а не на одну ячейку?
Код

class MyRenderer extends JTextPane
                 implements TableCellRenderer
{
 public Component getTableCellRendererComponent(JTable table, Object value,
                      boolean isSelected, boolean hasFocus, int row, int column)
 {
    if(column==9 && row==2)
       {
  setBackground(Color.GREEN);
  table.setRowHeight(row, 100); // высота ячейки/строки
  setText("");
  insertIcon(new javax.swing.ImageIcon(getClass().getResource("/pic/level.png")));
     }else
     {
        setBackground(Color.red);
       
     }
    return this;
 }
}


user posted image

Это сообщение отредактировал(а) Su_ - 19.6.2010, 00:34


--------------------
user posted image

PM MAIL WWW   Вверх
dorogoyIV
Дата 19.6.2010, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Su_ @  19.6.2010,  00:34 Найти цитируемый пост)
Не понимаю почему рендер рисует на всю таблицу, а не на одну ячейку?

рендерер можно поставить на столбец:
Код

 table.getColumnModel().getColumn(/*index*/).setCellRenderer(/*new MyRenderer*/);

потом в рендерере уже:
Код

 if(row == 2) // это для примера, условие может быть любое, какое хочешь...
  setBackground(Color.GREEN);


PM MAIL   Вверх
Su_
Дата 19.6.2010, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



круто , спасибо.! буду дальше пытать)


--------------------
user posted image

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.2041 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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