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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TableCellRenderer 
:(
    Опции темы
aquaserpent
Дата 28.9.2005, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Имеется следующий кусок кода (первые 2 столбца таблицы отрисовываются синим):
Код
// ....
       TableColumn column = table.getColumn(table.getColumnName(0));
       column.setCellRenderer(new ColumnRenderer());
       column = table.getColumn(table.getColumnName(1));
       column.setCellRenderer(new ColumnRenderer());
// ....
public class ColumnRenderer extends DefaultTableCellRenderer 
   {
       public Component getTableCellRendererComponent(JTable table, Object value,
                       boolean isSelected, boolean hasFocus, int row, int column) 
       {
           if(column == 0 || column == 1) 
           {
               setForeground(Color.blue);
           }
           else 
           {
               setForeground(Color.BLACK);
           }
           return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
       }
   } 

Что нужно добавить, чтобы при все при этом заголовок таблицы был отрисован жирным шрифтом (все равно каким)? Если добавляю
Код
table.getTableHeader().setDefaultRenderer(new ColumnRenderer ());
то отрисовывавется только заголовок таблицы и всё.

Это сообщение отредактировал(а) aquaserpent - 28.9.2005, 14:33
PM   Вверх
gretchen_
Дата 28.9.2005, 15:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как насчёт

table.setDefaultRenderer(...)
  Вверх
igon
Дата 29.9.2005, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

// ....
       ColumnRenderer myColumnRenderer = new ColumnRenderer();
       TableColumn column = table.getColumn(table.getColumnName(0));
       column.setCellRenderer(myColumnRenderer);
       column.setHeaderRenderer(myColumnRenderer); // Обязательно!!
...
// ....
public class ColumnRenderer extends DefaultTableCellRenderer 
   {
    JLabel component;
    Font font = new Font(null,Font.BOLD|Font.ITALIC,16);

    public Component getTableCellRendererComponent(JTable  table, 
                                                   Object  value,
                                                   boolean isSelected, 
                                                   boolean hasFocus, 
                                                   int     row, 
                                                   int column) 

      {

        component = new JLabel(value.toString());
        if(row == -1) // Отрисовывается Header 
          {
            component.setFont(font);
          }
        if(column == 0 || column == 1) 
          {
            component.setForeground(Color.BLUE);
          }
        else 
          {
            component.setForeground(Color.RED); // Если Renderer "повешен"  и на другие столбцы
          }
        return component;
      }
   } 


Это сообщение отредактировал(а) igon - 29.9.2005, 03:53


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


Новичок



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

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



Я уже сам до этого дошел, оказалось все просто. Я вызывал getTableCellRendererComponent после SetFont, поэтому и не работало.
Но все равно спасибо.

PM   Вверх
baroleg
Дата 4.10.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вопрос по теме:
Как изменить компонент(в заголовке столбца) при наезде мышкой на него?
У меня получается так:изменения отображаються только после того как таблица перекроеться
PM ICQ   Вверх
powerOn
Дата 4.10.2006, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(baroleg @  4.10.2006,  18:06 Найти цитируемый пост)
У меня получается так:изменения отображаються только после того как таблица перекроеться


Давай код выкладывай, посмотрим...

Цитата(baroleg @  4.10.2006,  18:06 Найти цитируемый пост)
Как изменить компонент(в заголовке столбца) при наезде мышкой на него?

А вообще нужно повесить слушателя для мыши на JTableHeader, связанный с твоей таблицей и обрабатывать mouseEntered с mouseExited.



--------------------
user posted image нет времени думать - нужно писать КОД!

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


Новичок



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

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



вот класс рисовальщика:
Код

class MyHeaderRender extends DefaultTableCellRenderer {
    JLabel comp;

    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        comp.setText(value.toString());
        return comp;
    }

    public MyHeaderRender() {
        super();
        comp = new JLabel("");
        comp.setHorizontalAlignment(JLabel.CENTER);
        comp.setFont(new Font("Tahoma", Font.PLAIN, 12));
        comp.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
        comp.setBackground(Color.WHITE);
        comp.setOpaque(true);
    }
}


вот место где пытаемся изменить:
Код

        JTableHeader th = result.getTableHeader();
        th.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                int col = result.columnAtPoint(e.getPoint());
                col = result.convertColumnIndexToModel(col);
                TableColumn tc = result.getColumnModel().getColumn(col);
                MyHeaderRender ren=new MyHeaderRender();
                ren.comp.setBackground(Color.YELLOW);
                tc.setHeaderRenderer(ren);
            }

        });


т.е. меняеться когда мышкой кликнем по столбцу
PM ICQ   Вверх
powerOn
Дата 4.10.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Вот что получилось:
Код

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableCellRenderer;

public class NewJFrame extends javax.swing.JFrame {
   
    /** Creates new form NewJFrame */
    public NewJFrame() {
        setLocationRelativeTo(null);
        initComponents();
        pack();
        
        jTable1.getTableHeader().setDefaultRenderer(new MyHeaderRenderer());
        
        jTable1.getTableHeader().addMouseListener(new MouseAdapter() {
            public void mouseExited(MouseEvent e) {
                MyHeaderRenderer r = (MyHeaderRenderer) jTable1.getTableHeader().getDefaultRenderer();
                r.setPos(-1);
                jTable1.getTableHeader().repaint();
            }
        });
        
        jTable1.getTableHeader().addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseMoved(MouseEvent e) {
                super.mouseMoved(e);
                MyHeaderRenderer r = (MyHeaderRenderer) jTable1.getTableHeader().getDefaultRenderer();
                r.setPos(jTable1.columnAtPoint(e.getPoint()));
                jTable1.getTableHeader().repaint();
            }
            
        });
    }

    private void initComponents() {
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        getContentPane().add(jScrollPane1, java.awt.BorderLayout.CENTER);

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-229)/2, (screenSize.height-170)/2, 229, 170);
    }
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration                   
    
}

 class MyHeaderRenderer extends DefaultTableCellRenderer {
    JLabel comp;
   
    private int pos = -1;
    
    public MyHeaderRenderer() {
        super();
        comp = new JLabel("");
        comp.setHorizontalAlignment(JLabel.CENTER);
        comp.setFont(new Font("Tahoma", Font.PLAIN, 12));
        comp.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
        comp.setOpaque(true);
    }
    
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) {
        comp.setText(value.toString());
        
        if (column == getPos()) {
            comp.setBackground(Color.GREEN);
        } else if (column != -1) {
            comp.setBackground(Color.WHITE);
        }
        return comp;
    }

    public int getPos() {
        return pos;
    }

    public void setPos(int pos) {
        this.pos = pos;
    }
}



--------------------
user posted image нет времени думать - нужно писать КОД!

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


Новичок



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

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



все работает, отлично.
Спасибо. smile 
PM ICQ   Вверх
powerOn
Дата 5.10.2006, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



пожалуйста. smile


--------------------
user posted image нет времени думать - нужно писать КОД!

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

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

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


 




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


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

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