Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Выдиление строки таблицы цветом


Автор: Vitello 21.3.2008, 20:20
Доброго времени суток.  Проблема, в общем-то, тривиальная, но решения ее я не нашел :(

У меня есть таблица, в зависимости от данных одного столбика мне надо "покрасить" строку в соответствующий цвет.

Это должно выглядеть приблизительно как стандартное выделение строки.

Автор: dorogoyIV 21.3.2008, 20:59
не совсем я понял, что тебе надо, ну вот примерно:
Код

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

class VitelloTable extends JFrame
{
 JTable jt=new JTable(1, 5);
 JButton red, green, blue;

 VitelloTable()
 {
  setBounds(100,100,400,300);
  setLayout(new FlowLayout());

  red=new JButton("Red");
  green=new JButton("Green");
  blue=new JButton("Blue");
  add(red);
  add(green);
  add(blue);

  add(jt);

  red.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    jt.setRowSelectionInterval(0, 0);
    jt.setSelectionBackground(Color.red);
   }
  });
 }

 public static void main(String [] args)
 {
  JFrame f=new VitelloTable();
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}


ну я думаю ничего сложного...
слушаешь изменения в таблице, и меняешь цвет

Автор: Vitello 21.3.2008, 21:08
Пасибо - то что нужно smile

Я было залез в дебри. Всякие рендереры вешал и т.д. А тут так все просто, аж стыдно.
Просто в документации не заметил чудо-метода

Код

setSelectionBackground(Color.red);


Ниче - буду учиться

Автор: Vitello 24.3.2008, 14:17
метод setSelectionBackground(Color color) устанавливает цвет выделения. А мне надо чтоб грид расскрасился без выделения. Ну, выдиление - ясное дело отдельным цветом

Автор: dorogoyIV 24.3.2008, 15:32
кажется здесь все понятно будет  smile  :
Код

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

class VitelloTable extends JFrame
{
 JTable jt=new JTable(10, 4);

 VitelloTable()
 {
  setBounds(100,100,400,300);
  setLayout(new FlowLayout());

  add(new JScrollPane(jt));
  for(int i=0; i < jt.getColumnCount(); i++)
  {
   TableColumn column=jt.getColumnModel().getColumn(i);

   if(i % 2 == 0)
    column.setCellRenderer(new VitelloRenderer());
  }
 }

 public static void main(String [] args)
 {
  JFrame f=new VitelloTable();
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

class VitelloRenderer extends JPanel
                      implements TableCellRenderer
{
 public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected,
                    boolean hasFocus, int row, int column)
 {
  setBackground(Color.blue);
  if(isSelected)
   setBackground(Color.red);
  return this;
 }
}

Автор: Vitello 24.3.2008, 15:35
пасиба. понятноsmile

Автор: niasilil 25.3.2008, 03:56
я вот этот пользовал несколько раз:
http://forum.vingrad.ru/forum/topic-77027/anchor-entry1009090/45.html

Автор: Marusja 27.3.2008, 11:06
У меня похожая проблема. Ваш пример хорош, но у меня компонент JdbTable, он не разрешает сделать метод setValeuAt, т.к. база данных закрыта от редактирования. Не знаю что делать, может кто подскажет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)