Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable программно выстроить колонки / 4 сообщений из 4, страница 1 из 1
07.11.2005, 14:33
    #33364156
Vector
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable программно выстроить колонки
Приветствую всех.
Вот такой вопрос. Есть таблица, в ней колонки. Колонки могут менять ширину и местоположение. Надо запоминать все это перед закрытием формы и восстанавливать при открытии.
Вот функции для сохранения и восстановления:
Код: 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
07.11.2005, 15:47
    #33364414
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable программно выстроить колонки
Покажи пожалуйста файл:
CommonCurrentNumbersFrame.xml
...
Рейтинг: 0 / 0
08.11.2005, 05:25
    #33365366
Vector
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable программно выстроить колонки
Вот он:
<?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
08.11.2005, 08:39
    #33365462
Vector
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable программно выстроить колонки
Все сделал. Пришлось ввести еще 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
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable программно выстроить колонки / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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