powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable программно выстроить колонки
4 сообщений из 4, страница 1 из 1
JTable программно выстроить колонки
    #33364156
Фотография Vector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую всех.
Вот такой вопрос. Есть таблица, в ней колонки. Колонки могут менять ширину и местоположение. Надо запоминать все это перед закрытием формы и восстанавливать при открытии.
Вот функции для сохранения и восстановления:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
     public   void  loadJustments(){
        //Load table column widthes
        java.util.Properties pr= new  java.util.Properties();
         try {
            pr.loadFromXML( new  java.io.FileInputStream("CommonCurrentNumbersFrame.xml"));
             int  w, ix;
             for ( int  i= 0 ; i<Table.getColumnCount(); i++){
                w=Integer.decode(pr.getProperty("Common current numbers frame-colwidth"+Table.getColumnName(i), "-1"));
                ix=Integer.decode(pr.getProperty("Common current numbers frame-colindex"+Table.getColumnName(i), "-1"));
                //Вот восстанавливаю ширину колонки
                 if (w>= 0 ) Table.getColumnModel().getColumn(i).setPreferredWidth(w);
                //Вот пытаюсь восстановить порядок колонок
                 if (ix>= 0 ) Table.getColumnModel().getColumn(i).setModelIndex(ix);
            }
            Table.setColumnModel(Table.getColumnModel());
        } catch (java.io.IOException ioe){
            javax.swing.JOptionPane.showMessageDialog( null , "Cannot load justments", "Warning", javax.swing.JOptionPane.WARNING_MESSAGE);
        }
    }
     public   void  saveJustments(){ 
        //Save table column widthes
        java.util.Properties pr= new  java.util.Properties();
         for ( int  i= 0 ; i<Table.getColumnCount(); i++){
            //Сохраняю ширину колонки
            pr.setProperty("Common current numbers frame-colwidth"+Table.getColumnName(i), String.valueOf(Table.getColumnModel().getColumn(i).getWidth()));
            //Сохраняю порядковый номер колонки
            pr.setProperty("Common current numbers frame-colindex"+Table.getColumnName(i), String.valueOf(Table.getColumnModel().getColumn(i).getModelIndex()));
        }
         try {
            pr.storeToXML( new  java.io.FileOutputStream("CommonCurrentNumbersFrame.xml"), "Common current numbers frame");
        } catch (java.io.IOException ioe){
            javax.swing.JOptionPane.showMessageDialog( null , "Cannot save justments", "Warning", javax.swing.JOptionPane.WARNING_MESSAGE);
        }
        
    }
Как бы с шириной колонок все в порядке. А вот как восстановить порядок колонок - это вопрос. Не получается. Вроде порядок сохраняется, но не восстанавливается.
Может кто-нибудь знает как решить данную проблему?

С уважением Vector
...
Рейтинг: 0 / 0
JTable программно выстроить колонки
    #33364414
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи пожалуйста файл:
CommonCurrentNumbersFrame.xml
...
Рейтинг: 0 / 0
JTable программно выстроить колонки
    #33365366
Фотография Vector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот он:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Common current numbers frame</comment>
<entry key="Common current numbers frame-colindex╨Э╨░╨╕╨╝╨╡╨╜╨╛╨▓╨░╨╜╨╕╨╡">0</entry>
<entry key="Common current numbers frame-colwidth╨Э╨░╨╕╨╝╨╡╨╜╨╛╨▓╨░╨╜╨╕╨╡">414</entry>
<entry key="Common current numbers frame-colwidth╨в╨╡╨║╤Г╤Й╨╕╨╣ ╨╜╨╛╨╝╨╡╤А">131</entry>
<entry key="Common current numbers frame-colindex╨в╨╡╨║╤Г╤Й╨╕╨╣ ╨╜╨╛╨╝╨╡╤А">1</entry>
<entry key="Common current numbers frame-colwidth╨У╨╛╨┤">54</entry>
<entry key="Common current numbers frame-colindex╨У╨╛╨┤">2</entry>
</properties>

Ну, соответственно UTF8 - в русских названиях колонок, поэтому не понятно.Но четко видно, что сохраняется индекс и ширина.
...
Рейтинг: 0 / 0
JTable программно выстроить колонки
    #33365462
Фотография Vector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все сделал. Пришлось ввести еще 2 класса.
Кому интересно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
//Column indexes---------------------------------
 class  ColumnIndex{
    java.lang.String name;
     int  index;
    ColumnIndex(){name=""; index= 0 ;}
    ColumnIndex(java.lang.String n,  int  i){name=n; index=i;}
     public   void  setColumn(java.lang.String n,  int  i){name=n; index=i; }
}
 public   class  ColumnIndexes{
     int  countItems;
    ColumnIndex[] indexes;
    javax.swing.JTable table;
    ColumnIndexes(javax.swing.JTable t,  int  ci){
        table=t; countItems= 1 ;
         if (ci> 1 ) countItems=ci;
        indexes= new  ColumnIndex[countItems];
    }
    
     public   int  getCountItems(){ return  countItems;}
     public   void  orderItems(){
         if (table!= null ){
             for ( int  i= 0 ;i<countItems;i++){
                 if (indexes[i]!= null ){
                     for ( int  j= 0 ;j<table.getColumnCount();j++){
                         if (indexes[i].name==table.getColumnName(j)){
                            table.moveColumn(j, indexes[i].index);
                             break ;
                        }
                    }
                }
            }    
        }
    }
    
     public   void  addItem( int  index, java.lang.String name,  int  columnIndex){
        indexes[index]= new  ColumnIndex(name,columnIndex);
    }
    
     public  ColumnIndex getItem( int  index){
        ColumnIndex ret= null ;
         if (index < countItems && index>= 0 ) ret=indexes[index];
         return  ret;
    }
}
//End column indexes---------------------------------
Эти классы нужны для хранения колонок таблицы при загрузке настроек:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
     public   void  loadJustments(){
        //Load table column widthes
        java.util.Properties pr= new  java.util.Properties();
         try {
            pr.loadFromXML( new  java.io.FileInputStream("CommonCurrentNumbersFrame.xml"));
             int  w, ix;
            String colname;
            ColumnIndexes ci= new  ColumnIndexes(Table, Table.getColumnCount());
             for ( int  i= 0 ; i<Table.getColumnCount(); i++){
                colname=Table.getColumnName(i);
                w=Integer.decode(pr.getProperty("Common current numbers frame-colwidth"+colname, "10"));
                ix=Integer.decode(pr.getProperty("Common current numbers frame-colindex"+colname, "0"));
                Table.getColumnModel().getColumn(i).setPreferredWidth(w);
                ci.addItem(i, colname, ix);
            }
            //Собственно вот здесь и происходит переупорядочивание колонок
            ci.orderItems();
        } catch (java.io.IOException ioe){
            javax.swing.JOptionPane.showMessageDialog( null , "Cannot load justments", "Warning", javax.swing.JOptionPane.WARNING_MESSAGE);
        }
    }
     public   void  saveJustments(){ 
        //Save table column widthes
        java.util.Properties pr= new  java.util.Properties();
         int  w, ix;
        String colname;
         for ( int  i= 0 ; i<Table.getColumnCount(); i++){
            colname=Table.getColumnName(i);
            w=Table.getColumnModel().getColumn(i).getWidth();
            pr.setProperty("Common current numbers frame-colwidth"+colname, String.valueOf(w));
            ix=Table.getColumnModel().getColumnIndex(Table.getColumnModel().getColumn(i).getIdentifier());
            pr.setProperty("Common current numbers frame-colindex"+colname, String.valueOf(ix));
        }
         try {
            pr.storeToXML( new  java.io.FileOutputStream("CommonCurrentNumbersFrame.xml"), "Common current numbers frame");
        } catch (java.io.IOException ioe){
            javax.swing.JOptionPane.showMessageDialog( null , "Cannot save justments", "Warning", javax.swing.JOptionPane.WARNING_MESSAGE);
        }
        
    }
Следует также обратить внимание, что настройки хранятся в фале по именам колонок, поэтому для этого кода недопустимо колонки с одинаковыми именами.
Вот собственно и все.
Спасибо всем, кто проявил интерес к моей проблеме.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable программно выстроить колонки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]