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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTable selectAll 
:(
    Опции темы
dorogoyIV
Дата 14.2.2008, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 smile так я ж и посмотрел  smile 
если в конце метода - хеадер нормально рисуется
а если в начале метода - непонятно что

может быть это только у меня так???
PM MAIL   Вверх
Warchief
Дата 14.2.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(dorogoyIV @  14.2.2008,  19:03 Найти цитируемый пост)
может быть это только у меня так???


нет у меня тоже так, в общем Ваш код работает прекрасно. Хотя всё-таки хотелось бы узнать почему так.
PM MAIL ICQ Skype   Вверх
PashaOvechkin
Дата 14.2.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

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



Ребят... В том то и дело что по разному, но!!!
Должный еффект от LaF виден только тогда, когда он установлен до прорисовки.
С ним всё выглядит классно - кроме хеадера... Судя по всему ето буг у сана.
Хотя не уверен... 

Вот, нарример, что то похожее...

Это сообщение отредактировал(а) PashaOvechkin - 14.2.2008, 19:53
PM MAIL Skype   Вверх
dorogoyIV
Дата 15.2.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



можно для других столбцов написать другой рендерер, что то вроде 
Код

class AnotherRenderer extends JPanel
                      implements TableCellRenderer
{
 public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected,
                    boolean hasFocus, int row, int column)
 {
  setLayout(new BorderLayout());
  setBorder(new BevelBorder(BevelBorder.RAISED));
  add(new JLabel(" Another"));
  return this;
 }
}


вот целиком этот пример:
Код

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

public class JTableHeaderCheckBox
{
 Object colNames[] = {"", "String 1", "String 2"};
 Object [][] data = {};
 DefaultTableModel dtm;
 JTable table;

 public void buildGUI()
 {
  dtm = new DefaultTableModel(data, colNames);
  table = new JTable(dtm);
  for(int x = 0; x < 5; x++)
  {
   dtm.addRow(new Object[]{new Boolean(false),
                           "Row "+(x+1)+" Col 2",
                           "Row "+(x+1)+" Col 3"});
  }

  TableColumn tc = table.getColumnModel().getColumn(0);
  tc.setCellEditor(table.getDefaultEditor(Boolean.class));
  tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));
  tc.setHeaderRenderer(new CheckBoxHeader(new MyItemListener()));

  for(int i=1; i < table.getColumnCount(); i++)
  {
   table.getColumnModel().getColumn(i)
          .setHeaderRenderer(
          new AnotherRenderer(colNames [i].toString()));
  }

  JFrame f = new JFrame();
  f.getContentPane().add(new JScrollPane(table));
  f.pack();
  f.setLocationRelativeTo(null);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setVisible(true);
 }

 class MyItemListener implements ItemListener
 {
  public void itemStateChanged(ItemEvent e)
  {
   Object source = e.getSource();
   if (source instanceof AbstractButton == false) return;

   boolean checked = (e.getStateChange() == ItemEvent.SELECTED);
   for(int x = 0; x < table.getRowCount(); x++)
   {
    table.setValueAt(new Boolean(checked), x, 0);
   }
  }
 }

 public static void main (String [] args)
 {
  SwingUtilities.invokeLater(new Runnable()
  {
   public void run()
   {
    try
    {
     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
     new JTableHeaderCheckBox().buildGUI();
    }
    catch(Exception ex){
       /***/
    }
   }
  });
 }
}

class CheckBoxHeader extends JCheckBox
                     implements TableCellRenderer,
                                MouseListener
{
 protected int column;
 protected boolean mousePressed = false;

 public CheckBoxHeader(ItemListener itemListener) {
    addItemListener(itemListener);
 }

 public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected,
                    boolean hasFocus, int row, int column)
 {
  if (table != null)
  {
   JTableHeader header = table.getTableHeader();
   if (header != null)
   {
    setForeground(header.getForeground());
    setBackground(header.getBackground());
    setFont(header.getFont());
    header.addMouseListener(this);
   }
  }
  setColumn(column);
  setText("Check All");
  setBorderPainted(true);
  setBorder(UIManager.getBorder("TableHeader.cellBorder"));
  return this;
 }

 protected void setColumn(int column) {
    this.column = column;
 }

 public int getColumn() {
    return column;
 }

 protected void handleClickEvent(MouseEvent e)
 {
  if (mousePressed)
  {
   mousePressed=false;
   JTableHeader header = (JTableHeader)e.getSource();
   JTable tableView = header.getTable();
   TableColumnModel columnModel = tableView.getColumnModel();
   int viewColumn = columnModel.getColumnIndexAtX(e.getX());
   int column = tableView.convertColumnIndexToModel(viewColumn);
 
   if(viewColumn == this.column && e.getClickCount() == 1
                                && column != -1)
   {
    doClick();
   }
  }
 }

 public void mouseClicked(MouseEvent e)
 {
  handleClickEvent(e);
//  ((JTableHeader)e.getSource()).repaint();
 }
 public void mousePressed(MouseEvent e) {
    mousePressed = true;
 }
 public void mouseReleased(MouseEvent e) {}
 public void mouseEntered(MouseEvent e) {}
 public void mouseExited(MouseEvent e) {}
}

class AnotherRenderer extends JPanel
                      implements TableCellRenderer
{
 String name;

 AnotherRenderer(String name)
 {
  this.name=name;
 }

 public Component getTableCellRendererComponent(JTable table,
                    Object value, boolean isSelected,
                    boolean hasFocus, int row, int column)
 {
  setLayout(new BorderLayout());
  setBorder(new BevelBorder(BevelBorder.RAISED));
  add(new JLabel(name));
  return this;
 }
}



Это сообщение отредактировал(а) dorogoyIV - 15.2.2008, 12:47
PM MAIL   Вверх
PashaOvechkin
Дата 15.2.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

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



С примером что то не так, в рендерере нету нужного конструктора, добавил, но всё равно не запускается - но ето не главное.
Тут проблема именно с Look'n feel. Если его он устанавлен как я и показывал, и операционка Vista или XP с темой "Windows XP", то крышка...
Ети рендереры русуют всё ужасно - можно попробовать. Ну и соответственно если добавить рендерер к остальным хедерам, они все будут корявыми :|
Тут или в ЙДК залезать  надо - или я на знаю как вообще...

Добавлено через 4 минуты и 7 секунд
Пордон, запускается всё как надо, просто рендерер вы показали отдельно, я его в соседний класс и засунул... smile 
Но проблема не решена
PM MAIL Skype   Вверх
Kangaroo
Дата 15.2.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



PashaOvechkin, 
попробуйте найти как сделан стандартный хедер в JTable и взять оттуда код.


--------------------
Lost....
PM MAIL MSN   Вверх
dorogoyIV
Дата 15.2.2008, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(PashaOvechkin @  15.2.2008,  13:10 Найти цитируемый пост)
Тут проблема именно с Look'n feel. Если его он устанавлен как я и показывал, и операционка Vista или XP с темой "Windows XP", то крышка...Ети рендереры русуют всё ужасно - можно попробовать. Ну и соответственно если добавить рендерер к остальным хедерам, они все будут корявыми :|

видимо пробема в ОС (у меня Windows XP) , так как мой пример у меня отображается без каких либо корявостей  smile
я пробовал разные LaF - все нормально
PM MAIL   Вверх
PashaOvechkin
Дата 15.2.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

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



В ХП проблема только в определённых темах... 
Kangaroo, ето у пытаюсь сейчас сделать. 
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.3076 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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