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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление и удаление столбцов в таблице, Добавление и удаление столбцов 
:(
    Опции темы
kaa2006
Дата 9.8.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет Всем.
Интересует вопрос вот есть таблица с иерархическими заголовками необходимо в ней добавлять столбцы и удалять. Но не в представление таблицы, а в модель. Как это можно сделать.
Есть прием пересоздавать каждый раз при добавлении модель таблицы но с обычной таблицей проблем не было, а вот с иерархической возникают проблемы возникает исключение NullpointerException. Я конечно понимаю, что это исключение возникает если какой-то элемент обнулен. Даже знаю какой, но почему не могу понять.
Если есть какие-то решения буду очень сильно благодарен.
Пример иерархической таблицы взят с http://www.crionics.com/products/opensourc...eExamples1.html 
Groupable Header  smile  smile 
PM MAIL   Вверх
powerOn
Дата 9.8.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Странно, но их пример у меня не заработал. Вернее заработал, но я увидел лишь нижнюю строку заголовка (я прикрепил изображение, посмотрите, если интресно конечно).
По теме: в примере используется обычная модель DefaultTableModel, а значит никаких дополнительных наворотов на неё не вешали. Так что можешь реализовать свою "удобную" модель и использовать совместно с иерархическими заголовками. Но конечно же придестя при удалении колонки из модели удалять и лишний заголовок из представления. Подробнее надо разбираться с кодом.

Присоединённый файл ( Кол-во скачиваний: 20 )
Присоединённый файл  image.JPG 13,45 Kb


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

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


Новичок



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

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



У меня все нормально с иерархическими заголовками реализацию всех элементов таблице необходимо делать в конструкторе и с выводом будет все нормально только при добавлении нового столбца в модели  необходимо добавить заголовок и 2 подзаголовока
все эти операции выполняются нормально, но когда нужно выводить на экран новые столбцы возникает исключение NullPointerException в файле 
GroupableTableHeaderUI.java в методе private int getHeaderHeight() 
в строке  TableCellRenderer renderer = aColumn.getHeaderRenderer(); так как renderer=null. Не могу понять почему?
 smile 

Как тут картинку прикрепить? 
PM MAIL   Вверх
powerOn
Дата 10.8.2006, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата

Как тут картинку прикрепить?  


В не быстром ответе, ниже смайлов темы кнопка "обзор"


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

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


Новичок



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

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



Это изображение моей таблицы.
Только вот при начальной инициализации renderer не нулевой. А при изменении модели таблицы почему то не срабатывает. smile 
PM MAIL   Вверх
kaa2006
Дата 11.8.2006, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Незнаю что то у меня на форуме не отображается прикрепленный файл.
Повторно пробую.

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  tableTree.GIF 33,11 Kb
PM MAIL   Вверх
powerOn
Дата 11.8.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Выкладывай код.


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

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


Новичок



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

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



Вот код 
инициализация таблицы и добавление:
Код

package HTablePackage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.util.*; /**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class TableMain extends JFrame {
    
    ArrayList ALGr1= new ArrayList();
       ArrayList ALGrStr = new ArrayList();

   JPanel MainPanel = new JPanel();
   GridBagLayout gridBagLayout1 = new GridBagLayout();
   private Object [] zVtv = {"Объем памяти", "tвып.","Объем памяти", "tвып.","Объем памяти", "tвып.","Объем памяти", "tвып.","Объем памяти", "tвып."};
      private Object [][] nVtv ={{new Double(10),new Double(5), new Double(20),new Double(3),
        new Double(40),new Double(2),new Double(15),new Double(25),new Double(23),new Double(21)},
        {new Double(12),new Double(35), new Double(27),new Double(13),new Double(29),
        new Double(4),new Double(22),new Double(17),new Double(5),new Double(24)},
        {new Double(51),new Double(25), new Double(23),new Double(13), new Double(21),
        new Double(46),new Double(25),new Double(20),new Double(21),new Double(29)},
        {new Double(12),new Double(10), new Double(28),new Double(6), new Double(21),
        new Double(35),new Double(1),new Double(24),new Double(19),new Double(20)}
        };
   DefaultTableModel dtm= new DefaultTableModel(nVtv,zVtv);
      private String [] ZVtv ={"Центр управления №1","Центр управления №2","Центр управления №3","Центр управления №4"};
      String [] gzaglVtv ={"Задание №1","Задание №2","Задание №3","Задание №4","Задание №5"};

   JTable jTabVtv;
   JScrollPane jScrollPane1;
   JButton jButton1 = new JButton();
   JButton jButton2 = new JButton();

    public TableMain() {
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public static void main(String [] args){
        TableMain MT = new TableMain();
        MT.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        MT.setVisible(true);

    }

    private void jbInit() throws Exception {
        setSize(new Dimension(600,300)); setTitle("Иерархическая таблица");
        MainPanel.setLayout(gridBagLayout1);
        jButton1.setText("ДОБАВИТЬ");
        jButton1.addActionListener(new TableMain_jButton1_actionAdapter(this));
        jButton1.setMaximumSize(new Dimension(100, 25));
        jButton1.setMinimumSize(new Dimension(100, 25));
        jButton1.setPreferredSize(new Dimension(100, 25));
        jButton2.setMaximumSize(new Dimension(100, 25));
        jButton2.setMinimumSize(new Dimension(100, 25));
        jButton2.setPreferredSize(new Dimension(100, 25));
        jButton2.setText("УДАЛИТЬ");
        getContentPane().add(MainPanel);
        InitialTable();
       
        
    }

   public void InitialTable(){
        jTabVtv= new JTable(dtm);
        TableColumnModel columnModel=jTabVtv.getColumnModel();
        jTabVtv.setTableHeader(new GroupableTableHeader(columnModel));
        jTabVtv.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        jScrollPane1 = new JScrollPane(jTabVtv);
        MainPanel.add(jScrollPane1, new GridBagConstraints(0, 0, 1, 5, 1.0, 1.0
                , GridBagConstraints.CENTER, GridBagConstraints.BOTH,
                new Insets(2, 2, 2, 2), 0, 0));
        MainPanel.add(jButton1, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
               , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
               new Insets(2, 2, 2, 2), 0, 0));
       MainPanel.add(jButton2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
               , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
               new Insets(2, 2, 2, 2), 0, 0));
       jTabVtv.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       jTabVtv.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jTabVtv.getSelectionModel().setSelectionInterval(0,0);
       int k=0;
          TableColumnModel CM_T10 = jTabVtv.getColumnModel();
          jTabVtv.getColumnModel().setColumnMargin(0);
          for(int i=0 ;i<gzaglVtv.length;i++){
              ALGrStr.add(gzaglVtv[i]);
              ColumnGroup cg=new ColumnGroup((String)ALGrStr.get(i));
                      cg.add(CM_T10.getColumn(k));
                      cg.add(CM_T10.getColumn(k + 1));
                      k+=2;
                      ALGr1.add(cg);

          }
           GroupableTableHeader header = (GroupableTableHeader)jTabVtv.getTableHeader();
              for(int i=0 ;i<gzaglVtv.length;i++){
                  header.addColumnGroup((ColumnGroup)ALGr1.get(i));
              }

              int s2=100;
              for (int j = 0; j < jTabVtv.getColumnCount(); j++) {
                  TableColumnModel CM_T8 = jTabVtv.getColumnModel();
                  TableColumn ChCol8 = CM_T8.getColumn(j);
                  if (j%2==0){
                      ChCol8.setMaxWidth(s2+100);
                      ChCol8.setMinWidth(s2);
             ChCol8.setPreferredWidth(s2);
         }
     }
    jTabVtv.repaint();
    }

    public void jButton1_actionPerformed(ActionEvent e) {
        int r=dtm.getRowCount();
   int c= dtm.getColumnCount()+2;
   Object[] vtZ;
   Object [][] obj;
    vtZ = new Object[c];
            for (int i = 0; i < c; i++) {
                vtZ[i] = dtm.getColumnName(i);
                if(i==c-2)vtZ[i]="Объем памяти";
                if(i==c-1)vtZ[i]="tвып.";
            }
            obj = new Object[r][c];
            for (int i=0; i<r; i++)
                for(int j=0; j<c;j++)
           if (j<c-2)obj[i][j]=dtm.getValueAt(i,j); else
               obj[i][j]= new Integer(0);
         dtm.setDataVector(obj,vtZ);
          ALGrStr.add("Задание №"+String.valueOf(ALGrStr.size()+1));
          int k=c-2;
          TableColumnModel CM_T10 = jTabVtv.getColumnModel();
          jTabVtv.getColumnModel().setColumnMargin(0);
              ColumnGroup cg=new ColumnGroup((String)ALGrStr.get(ALGrStr.size()-1));
                      cg.add(CM_T10.getColumn(k));
                      cg.add(CM_T10.getColumn(k + 1));
                      ALGr1.add(cg);
          GroupableTableHeader header = (GroupableTableHeader)jTabVtv.getTableHeader();
                  header.addColumnGroup((ColumnGroup)ALGr1.get(ALGrStr.size()-1));
             int s2=100;
              for (int j = 0; j < jTabVtv.getColumnCount(); j++) {
                  TableColumnModel CM_T8 = jTabVtv.getColumnModel();
                  TableColumn ChCol8 = CM_T8.getColumn(j);
                  if (j%2==0){
                      ChCol8.setMaxWidth(s2+100);
                      ChCol8.setMinWidth(s2);
             ChCol8.setPreferredWidth(s2);
             }
          }
    }
}


class TableMain_jButton1_actionAdapter implements ActionListener {
    private TableMain adaptee;
    TableMain_jButton1_actionAdapter(TableMain adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}



А  все остальные файлы возьмешь с http://www.crionics.com/products/opensourc...eExamples1.html Groupable Header
только надо во всех файлах поменять package
Спасибо большое за помощь. smile 
PM MAIL   Вверх
kaa2006
Дата 13.8.2006, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хотел узнать получилось что-нибудь с добавлением и удалением столбцов из модели иерархической таблицы?
PM MAIL   Вверх
powerOn
Дата 14.8.2006, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(kaa2006 @  10.8.2006,  22:48 Найти цитируемый пост)
У меня все нормально с иерархическими заголовками реализацию всех элементов таблице необходимо делать в конструкторе и с выводом будет все нормально только при добавлении нового столбца в модели  необходимо добавить заголовок и 2 подзаголовока все эти операции выполняются нормально, но когда нужно выводить на экран новые столбцы возникает исключение NullPointerException в файле GroupableTableHeaderUI.java в методе private int getHeaderHeight() 
в строке  TableCellRenderer renderer = aColumn.getHeaderRenderer(); так как renderer=null. Не могу понять почему?


Я пытался запустить Ваш пример, но NullPointerException в методе getHeaderHeight()  вылетал не только при добавлении столбцов, но даже при попытке таблицу отобразить.  smile  Я поправил данный баг, но насколько грамотно оценить не могу.  smile  Могу лишь одно отметить, то что вылетало NullPointerException в данном участке кода, это вполне нормальное явление, его нужно было учитывать при разработке GroupableTableHeaderUI. Чесно говоря, я вообще не помаю, каким образом Вам удалось запустить данный пример с наличием этой ошибки...  smile   Какая у Вас версия JDK? С пофиксиным GroupableTableHeaderUI таблица заработала, но на добавление я еще не смотрел.

Вот мною пофиксиный GroupableTableHeaderUI [изменения только в методах paintCell(Graphics g, Rectangle cellRect, int columnIndex) и  getHeaderHeight()] :

Код

import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.plaf.basic.*;

public class GroupableTableHeaderUI extends BasicTableHeaderUI {
    
    public void paint(Graphics g, JComponent c) {
        Rectangle clipBounds = g.getClipBounds();
        if (header.getColumnModel() == null) return;
        ((GroupableTableHeader)header).setColumnMargin();
        int column = 0;
        
        Dimension size = header.getSize();
        Rectangle cellRect  = new Rectangle(0, 0, size.width, size.height);
        Hashtable h = new Hashtable();
        int columnMargin = header.getColumnModel().getColumnMargin();
        
        Enumeration enumeration = header.getColumnModel().getColumns();
        while (enumeration.hasMoreElements()) {
            cellRect.height = size.height;
            cellRect.y      = 0;
            TableColumn aColumn = (TableColumn)enumeration.nextElement();
            Enumeration cGroups = ((GroupableTableHeader)header).getColumnGroups(aColumn);
            if (cGroups != null) {
                int groupHeight = 0;
                while (cGroups.hasMoreElements()) {
                    ColumnGroup cGroup = (ColumnGroup) cGroups.nextElement();
                    Rectangle groupRect = (Rectangle) h.get(cGroup);
                    if (groupRect == null) {
                        groupRect = new Rectangle(cellRect);
                        Dimension d = cGroup.getSize(header.getTable());
                        groupRect.width  = d.width;
                        groupRect.height = d.height;
                        h.put(cGroup, groupRect);
                    }
                    paintCell(g, groupRect, cGroup);
                    groupHeight += groupRect.height;
                    cellRect.height = size.height - groupHeight;
                    cellRect.y      = groupHeight;
                }
            }
            cellRect.width = aColumn.getWidth() + columnMargin;
            if (cellRect.intersects(clipBounds)) {
                paintCell(g, cellRect, column);
            }
            cellRect.x += cellRect.width;
            column++;
        }
    }
    
    // Этот метод был мной изменен.
    private void paintCell(Graphics g, Rectangle cellRect, int columnIndex) {
        
        TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
        TableCellRenderer renderer = aColumn.getHeaderRenderer();
        Component component = null;
        // Добавляем проверку на наличие  renderer, если его нет, то используем стандартный.
        if (renderer != null) {
            component = renderer.getTableCellRendererComponent(
                    header.getTable(), aColumn.getHeaderValue(), false, false, -1, columnIndex);
        } else {
            component = new JTableHeader().getDefaultRenderer().getTableCellRendererComponent(
                    header.getTable(), aColumn.getHeaderValue(), false, false, -1, columnIndex);
        }
        
        rendererPane.add(component);
        rendererPane.paintComponent(g, component, header, cellRect.x, cellRect.y,
                cellRect.width, cellRect.height, true);
    }
    
    
    private void paintCell(Graphics g, Rectangle cellRect, ColumnGroup cGroup) {
        TableCellRenderer renderer = cGroup.getHeaderRenderer();
        Component component = renderer.getTableCellRendererComponent(
                header.getTable(), cGroup.getHeaderValue(),false, false, -1, -1);
        rendererPane.add(component);
        rendererPane.paintComponent(g, component, header, cellRect.x, cellRect.y,
                cellRect.width, cellRect.height, true);
    }
    
    //Этот метод был мной изменен.
    private int getHeaderHeight() {
        int height = 0;
        TableColumnModel columnModel = header.getColumnModel();
        
        for(int column = 0; column < columnModel.getColumnCount(); column++) {
            TableColumn aColumn = columnModel.getColumn(column);
            TableCellRenderer renderer = aColumn.getHeaderRenderer();
            // Добавляем проверку на наличие  renderer, если его нет, то используем стандартный.
            Component component = null;
            if (renderer != null) {
                component = renderer.getTableCellRendererComponent(
                        header.getTable(), aColumn.getHeaderValue(), false, false, -1, column);
            } else {
                component = new JTableHeader().getDefaultRenderer().getTableCellRendererComponent(
                    header.getTable(), aColumn.getHeaderValue(), false, false, -1, column);
            }
            
            int cHeight = component.getPreferredSize().height;

            Enumeration en = ((GroupableTableHeader) header).getColumnGroups(aColumn);
            if (en != null) {
                while (en.hasMoreElements()) {
                    ColumnGroup cGroup = (ColumnGroup)en.nextElement();
                    cHeight += cGroup.getSize(header.getTable()).height;
                }
            }
            height = Math.max(height, cHeight);
        }
        return height;
    }
    
    private Dimension createHeaderSize(long width) {
        TableColumnModel columnModel = header.getColumnModel();
        width += columnModel.getColumnMargin() * columnModel.getColumnCount();
        if (width > Integer.MAX_VALUE) {
            width = Integer.MAX_VALUE;
        }
        return new Dimension((int)width, getHeaderHeight());
    }
    
    public Dimension getPreferredSize(JComponent c) {
        long width = 0;
        Enumeration enumeration = header.getColumnModel().getColumns();
        while (enumeration.hasMoreElements()) {
            TableColumn aColumn = (TableColumn)enumeration.nextElement();
            width = width + aColumn.getPreferredWidth();
        }
        return createHeaderSize(width);
    }
}







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

PM MAIL   Вверх
kaa2006
Дата 14.8.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня JDK 1.4, но 1.5 тоже должно работать.
Но мне не понятно, а почему при создании групп с renderer было все нормально, а при отображении он становиться нулевым. Где он обнуляется ? Решение это простое взять там где определяется renderer сделать проверку. Но я сделал по другому может даже как-то коряво при добавлении пересоздаю данную таблицу с нужным количеством столбцов, а потом присвоевую новую таблицу прежней, но это чтобы голову не забивать что в классах с http://www.crionics.com/products/opensourc...eExamples1.html Groupable Header.
Но у меня вопрос такое решение не уменьшит скорость выполнение программы в целом? smile 
PM MAIL   Вверх
powerOn
Дата 14.8.2006, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(kaa2006 @  14.8.2006,  12:31 Найти цитируемый пост)
У меня JDK 1.4, но 1.5 тоже должно работать.

Должно, да не работает...  smile  Это придется учитывать...

Цитата(kaa2006 @  14.8.2006,  12:31 Найти цитируемый пост)
Где он обнуляется ? 

Он при создании не устанавливается, это значение по умолчанию. Вот что в доке написано:

Цитата

Returns the TableCellRenderer used to draw the header of the TableColumn. When the headerRenderer is null, the JTableHeader  uses its defaultRenderer. The default value for a headerRenderer is null.


Т.е. я так понимаю, что если headerRenderer = null, то UI и другие объеты нуждающиеся в headerRenderer, должны самостоятельно использовать, так сказать на свое усмотрение, какой-либо Renderer. Системные UI и прочие объекты, в таких случаях, используют JTableHeader().getDefaultRenderer(). И класс GroupableTableHeaderUI вероятно, должен был его использовать, но не делает этого, что ведет к NullPointerException...  smile  

Цитата(kaa2006 @  14.8.2006,  12:31 Найти цитируемый пост)
Но я сделал по другому может даже как-то коряво при добавлении пересоздаю данную таблицу с нужным количеством столбцов, а потом присвоевую новую таблицу прежней


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

Цитата(kaa2006 @  14.8.2006,  12:31 Найти цитируемый пост)
Но у меня вопрос такое решение не уменьшит скорость выполнение программы в целом?


Выполнение любого дополнительного действия однозначно уменьшить скорость выполнения. Чтоб увеличить скорость нужно от каких-то операций избавляться, а не прибавлять их. 


Это сообщение отредактировал(а) MoonCat - 14.8.2006, 12:26


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

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


Новичок



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

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



Но насколько я знаю, что сама таблица является элементом визуализации, а все данные хранятся в модели, поэтому необходимо при добавлении или уменьшении столбцов изменять модель таблицы.
PM MAIL   Вверх
powerOn
Дата 15.8.2006, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(kaa2006 @  15.8.2006,  00:08 Найти цитируемый пост)
Но насколько я знаю, что сама таблица является элементом визуализации, а все данные хранятся в модели, поэтому необходимо при добавлении или уменьшении столбцов изменять модель таблицы. 


Да все правильно. И Вашем случае так же надо делать, но! Если нужно добавить столбцы или строки, то соответствующим образом меняется модель. Но так как Вы имеете нестандартный JTableHeader, то нужно учитывать и его логику работы. Ведь когда мы использовали стандартные компоненты таблицы, то все внутренние механизмы были реализованны за нас. Мы лишь использовали их не вникая в подробности той же прорисовки. Здесь другое дело, т.к. мы используем свой собственный механизм для отображения заголовка таблицы (JTableHeader и его UI), то и нам заботиться о корректности его работы и совместимости со стандартными механизмами таблицы, с то же TableModel. Чего лично я пронаблюдать не успел, но  в том причина моя JDK 1.5.0.7.


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

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


Новичок



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

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



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


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

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