Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в JTable "заморозить" несколько рядов и колонок? / 23 сообщений из 23, страница 1 из 1
11.10.2006, 13:45:31
    #34047209
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Кто знает сравнительно несложный способ заставить несколько начальных рядов и колонок таблицы всегда оставаться на своих местах при скроллинге таблицы?
...
Рейтинг: 0 / 0
11.10.2006, 14:11:50
    #34047357
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
убейсибя ап JTable.
...
Рейтинг: 0 / 0
11.10.2006, 16:00:54
    #34047888
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Timmубейсибя ап JTable.
Модератор: Alex-2, еще одно подобное сообщение, и бан на сутки
...
Рейтинг: 0 / 0
11.10.2006, 16:13:29
    #34047938
j+o
j+o
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Alex-2 Timmубейсибя ап JTable.
Вот - уродНаверное Timm имел в виду, что сделать это сравнительно несложным и каким-то стандартным способом нельзя, что вам нужно будет очень постараться чтобы реализовать данную очень нестандартную задачу. Единственное что приходит на ум это создать такую таблицу из нескольких.
...
Рейтинг: 0 / 0
11.10.2006, 16:22:50
    #34047979
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
 import  java.awt.*;
 import  java.awt.event.*;
 import  java.awt.image.*;
 import  javax.swing.*;
 import  javax.swing.table.*;

/**
 * @author RONAS1
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
 public   class  FreezeColumnsTest
     extends  JFrame {

  Object[][] data;
  Object[] column;
  TTable table;

   public  FreezeColumnsTest() {
     super ("Fixed Column Example");

    data =  new  Object[][] {
        {
        "a", "b", "c", "", "", "", "", ""}, {
        "a", "b", "c", "", "", "", "", ""}, {
        "a", "b", "c", "", "", "", "", ""}, {
        "a", "b", "c", "d", "", "", "", ""}, {
        "a", "b", "c", "", "e", "", "", ""}, {
        "a", "b", "c", "", "", "f", "", ""}, {
        "a", "b", "c", "", "", "", "g", ""}, {
        "a", "b", "c", "", "", "", "", "h"}
    };
    column =  new  Object[] {
        "A", "B", "C", "D", "E", "F", "G", "H"};

    AbstractTableModel model =  new  AbstractTableModel() {
       public   int  getColumnCount() {
         return  column.length;
      }

       public   int  getRowCount() {
         return  data.length;
      }

       public  String getColumnName( int  col) {
         return  (String) column[col];
      }

       public  Object getValueAt( int  row,  int  col) {
         return  data[row][col];
      }

       public   void  setValueAt(Object obj,  int  row,  int  col) {
        data[row][col] = obj;
      }

       public   boolean  CellEditable( int  row,  int  col) {
         return  true;
      }
    };

    table =  new  TTable(model);

    JPanel p1 =  new  JPanel();
    p1.setLayout( new  BorderLayout());
    p1.add(table, BorderLayout.CENTER);

    JPanel p2 =  new  JPanel();
    p2.setLayout( new  BorderLayout());
    p2.add(table, BorderLayout.CENTER);

    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    JScrollPane scroll =  new  JScrollPane(table);

    scroll.getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);

    getContentPane().add(scroll, BorderLayout.CENTER);

  }

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

 class  TTable
     extends  JTable {

   public  TTable(TableModel dm) {
     super (dm);
    setTableHeader( new  TTableHeader(getColumnModel()));

  }

   public   void  paintComponent(Graphics g) {

     super .paintComponent(g);

     int  w =  this .getColumnModel().getColumn( 0 ).getWidth();

    Point pt = getLocation();

     if  (pt.x <  0 ) {

      BufferedImage image =  new  BufferedImage(w, getHeight(),
                                              BufferedImage.TYPE_INT_RGB);
      Graphics2D g2d = image.createGraphics();
      g2d.setClip( 0 ,  0 , w, getHeight());
       super .paintComponent(g2d);
       int  ox = Math.abs(pt.x);
      g.drawImage(image, ox,  0 ,  null );
      g2d.dispose();
       int  lx = ox + w;
      g.drawLine(lx,  0 , lx, getHeight());

    }
     else  {
       int  ox = Math.abs(pt.x);
       int  lx = ox + w;
      g.drawLine(lx,  0 , lx, getHeight());

    }

  }

}

 class  TTableHeader
     extends  JTableHeader {

  TTableHeader(TableColumnModel md) {
     super (md);
  }

   public   void  paintComponent(Graphics g) {

     super .paintComponent(g);

     int  w =  this .getColumnModel().getColumn( 0 ).getWidth();

    Point pt = getLocation();

     if  (pt.x <  0 ) {

      BufferedImage image =  new  BufferedImage(w, getHeight(),
                                              BufferedImage.TYPE_INT_RGB);
      Graphics2D g2d = image.createGraphics();
      g2d.setClip( 0 ,  0 , w, getHeight());
       super .paintComponent(g2d);
       int  ox = Math.abs(pt.x);
      g.drawImage(image, ox,  0 ,  null );
      g2d.dispose();

       int  lx = ox + w;
      g.drawLine(lx,  0 , lx, getHeight());

    }
     else  {
       int  ox = Math.abs(pt.x);
       int  lx = ox + w;
      g.drawLine(lx,  0 , lx, getHeight());

    }

  }
}
...
Рейтинг: 0 / 0
11.10.2006, 16:25:11
    #34047992
jikez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
...
Рейтинг: 0 / 0
11.10.2006, 16:40:15
    #34048069
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
К сожалению RowHeader и разбивка на несколько таблиц с одной моделью заказчика не устраивает...
...
Рейтинг: 0 / 0
11.10.2006, 16:44:45
    #34048087
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
У меня есть подобный пример где статичная часть запихивается в RowHeader (в приложении), но заказчик хочет не только колонки, но и ряды морозить и в любом количестве!
...
Рейтинг: 0 / 0
11.10.2006, 20:46:53
    #34048738
alexx726
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Уважаемый Alex-2
Боюсь, что в Swing'е Вы не найдете НИ ОДНОГО компонента, который бы НЕСЛОЖНО делал то, что Вы хотите...

fixedColumns Вы сможете добиться ТОЛЬКО путем того самого RowHeader у JScrollPane. Но там возникает проблема синхронизации двух JTable. Причем это - баг Swing'a (никто мне это не объяснил кстати в предыдущей ветке)
Добрые парни c Запада эту проблему решили (искал аж неделю - поищи JScrollPaneAdjuster).

Вариант с fixedRows только один -новый JScrollPane, новый JTable и синхронизация JScrollBar (примеры описаны)
Но там уж позволь -фиксируюца только твои ПОСЛЕДНИЕ строки...
...
Рейтинг: 0 / 0
12.10.2006, 09:08:39
    #34049132
jikez
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Alex-2К сожалению RowHeader и разбивка на несколько таблиц с одной моделью заказчика не устраивает...

А чем не устраивает интересно?
...
Рейтинг: 0 / 0
12.10.2006, 12:04:35
    #34049846
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в 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.
36.
37.
38.
39.
40.
41.
 class  TTable
     extends  JTable {
   final   int  FIX_COL =  3 ;
   final   int  FIX_ROW =  1 ;

   public  TTable(TableModel dm) {
     super (dm);
//    setTableHeader(new TTableHeader(getColumnModel()));

  }

   public   void  paintComponent(Graphics g) {

     super .paintComponent(g);

     int  w =  this .getColumnModel().getColumn( 0 ).getWidth();
     int  h =  this .getRowHeight();

    Point pt = getLocation();

     if  (pt.x <  0 ) {

 
      BufferedImage image =  new  BufferedImage(w * FIX_COL, getHeight(),
                                             BufferedImage.TYPE_INT_RGB);
     Graphics2D g2d = image.createGraphics();
     g2d.setClip( 0 ,  0 , w * FIX_COL, getHeight());
      super .paintComponent(g2d);
      int  ox = Math.abs(pt.x);
     g.drawImage(image, ox,  0 ,  null );
     g2d.dispose();
      int  lx = ox + w * FIX_COL;
     g.drawLine(lx,  0 , lx, getHeight());

   }
  
      int  ox = Math.abs(pt.x);
      int  lx = ox + w * FIX_COL;
     g.drawLine(lx,  0 , lx, getHeight());
 
  }
}
Для определения неподвижности FIX_ROW рядов думаю хватит ума домыслить самостоятельно!!! Чистая математика по прототипу. В остальном см. код выше
...
Рейтинг: 0 / 0
12.10.2006, 12:54:29
    #34050169
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Конечно решение упрощено ограничениями на одинаковость ячеек, однотипность данных и т.д Но в данном примере решается задача просмотра с возможностью выделения .
...
Рейтинг: 0 / 0
12.10.2006, 12:57:33
    #34050190
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
За выделение отвечает рендерер ячейки (классика)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 class  ColorRender
     extends  JLabel  implements  TableCellRenderer {
   public  Component getTableCellRendererComponent(JTable table,
                                                 Object value,
                                                  boolean  isSelected,
                                                  boolean  hasFocus,  int  row,
                                                  int  column) {
     if  (isSelected) {
       this .setBorder( new  LineBorder(Color.red));
    }
     else  {
       this .setBorder( new  LineBorder(Color.white));
    }
     this .setText(String.valueOf(value));
     this .setHorizontalAlignment(CENTER);
     return   this ;
  }
}
...
Рейтинг: 0 / 0
12.10.2006, 13:06:53
    #34050267
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Всем спасибо за участие и прошу простить за лишние эмоции
...
Рейтинг: 0 / 0
12.10.2006, 13:17:17
    #34050325
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Alex-2Весьма сожалею о столь низком уровне чата!!! Я уже нашел
Где ты тут чат нашел не понятно
...
Рейтинг: 0 / 0
12.10.2006, 14:29:01
    #34050646
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
peter6636 Alex-2Весьма сожалею о столь низком уровне чата!!! Я уже нашел
Где ты тут чат нашел не понятно
Слово "форум" - 5 букв слово "чат" - 3 - вся разница
...
Рейтинг: 0 / 0
12.10.2006, 20:22:31
    #34052005
alexx726
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
ты не сможешь отрисовать эту долбаную таблицу таким способом (этот вариант я уже проходил)
Точнее, не так - ты сможешь её отрисовать как обычную табличку. Дальше начинаюца заморочки - сортировка, группировка, resize, желание установить свой Border, L&F и т.д.
А все-таки, так и непонятно, чем заказчика не устраивает 2(3) таблицы, учитывая, что он их даже не "распознает" (кроме ScrollBar)
...
Рейтинг: 0 / 0
23.10.2006, 13:16:31
    #34073807
Alex-2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
Могу!
Lusy &&
...
Рейтинг: 0 / 0
23.10.2006, 13:24:29
    #34073831
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
alexx726А все-таки, так и непонятно, чем заказчика не устраивает 2(3) таблицы, учитывая, что он их даже не "распознает" (кроме ScrollBar)
Вот это вот -



- одиночный JTable. Если при единственном JTable такие фичи, я понимаю заказчика, которому не нужны "несколько как один".
...
Рейтинг: 0 / 0
23.10.2006, 14:42:14
    #34074132
alexx726
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
softwarer
Вот это вот -


- одиночный JTable. Если при единственном JTable такие фичи, я понимаю заказчика, которому не нужны "несколько как один".

1) Неизвестно, вообще ЭТО - JTable (кто его знает перцев из Oracle, может они сами нарисовали).

2) А если и JTable, то просто нет repaint'а заголовка

А вот вопросик к Alex-2:

Надеюсь, твоя таблица не является редактируемой? Потому что я пока не понимаю, как спозиционировать редактор в то "чудо прорисовки" от Ronas1
...
Рейтинг: 0 / 0
23.10.2006, 14:46:16
    #34074150
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
alexx7261) Неизвестно, вообще ЭТО - JTable
Известно. Я смотрел.

alexx726(кто его знает перцев из Oracle, может они сами нарисовали).
Хм. Как ни странно, нарисовали сами - это Oracle L&F :)

alexx7262) А если и JTable, то просто нет repaint'а заголовка
Нет, не так. Там явно какая-то фигня с MinSize. Я собственно хотел минимизировать ненужные столбцы, заголовок сжался, а вот колонки меньше указанного размера съезжаться не пожелали.
...
Рейтинг: 0 / 0
23.10.2006, 15:33:46
    #34074357
alexx726
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
2Softwarer

Слушай, а как вы запихнули Oracle L&F в приложение? У меня ну ничего не получалось в Java Beans для Oracle Forms :(
мне так казалось, что oracle.ewt.laf.oracle.OracleLookAndFeel не является наследником Look&Feel.

А по поводу fixed - да вроде вариант с paintComponent нормально прокатывает (ну разумеется если примерчик подправить - так он нерабочий)
Смущают editors
Да и такого поведения JTable как у тебя, я не замечал...
...
Рейтинг: 0 / 0
23.10.2006, 16:37:04
    #34074647
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в JTable "заморозить" несколько рядов и колонок?
alexx726Слушай, а как вы запихнули Oracle L&F в приложение? У меня ну ничего не получалось в Java Beans для Oracle Forms :(
Ничего не могу сказать про Oracle Forms, в обычном java-приложении использовал без малейших проблем. Сколь мне помнится, единственно его надо было явно зарегистрировать.

alexx726Да и такого поведения JTable как у тебя, я не замечал...
Я не упираю на конкретный глюк, вопрос в том, что составные компоненты заведомо уязвимы, и скриншот это хорошо показывает (рассинхронизация заголовка с текстом). Если сделать "из трех таблиц", стопроцентно потребуется тратить кучу времени на их синхронизацию, при тех же ресайзах колонок, например, и надежность результата имхо все равно сомнительна.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в JTable "заморозить" несколько рядов и колонок? / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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