powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как в JTable "заморозить" несколько рядов и колонок?
23 сообщений из 23, страница 1 из 1
Как в JTable "заморозить" несколько рядов и колонок?
    #34047209
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто знает сравнительно несложный способ заставить несколько начальных рядов и колонок таблицы всегда оставаться на своих местах при скроллинге таблицы?
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34047357
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убейсибя ап JTable.
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34047888
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timmубейсибя ап JTable.
Модератор: Alex-2, еще одно подобное сообщение, и бан на сутки
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34047938
j+o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
j+o
Гость
Alex-2 Timmубейсибя ап JTable.
Вот - уродНаверное Timm имел в виду, что сделать это сравнительно несложным и каким-то стандартным способом нельзя, что вам нужно будет очень постараться чтобы реализовать данную очень нестандартную задачу. Единственное что приходит на ум это создать такую таблицу из нескольких.
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34047979
Фотография Alex-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.
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
Как в JTable "заморозить" несколько рядов и колонок?
    #34047992
jikez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34048069
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению RowHeader и разбивка на несколько таблиц с одной моделью заказчика не устраивает...
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34048087
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть подобный пример где статичная часть запихивается в RowHeader (в приложении), но заказчик хочет не только колонки, но и ряды морозить и в любом количестве!
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34048738
alexx726
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Alex-2
Боюсь, что в Swing'е Вы не найдете НИ ОДНОГО компонента, который бы НЕСЛОЖНО делал то, что Вы хотите...

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

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

А чем не устраивает интересно?
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34049846
Фотография Alex-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.
 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
Как в JTable "заморозить" несколько рядов и колонок?
    #34050169
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно решение упрощено ограничениями на одинаковость ячеек, однотипность данных и т.д Но в данном примере решается задача просмотра с возможностью выделения .
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34050190
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
За выделение отвечает рендерер ячейки (классика)
Код: 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
Как в JTable "заморозить" несколько рядов и колонок?
    #34050267
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо за участие и прошу простить за лишние эмоции
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34050325
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex-2Весьма сожалею о столь низком уровне чата!!! Я уже нашел
Где ты тут чат нашел не понятно
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34050646
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peter6636 Alex-2Весьма сожалею о столь низком уровне чата!!! Я уже нашел
Где ты тут чат нашел не понятно
Слово "форум" - 5 букв слово "чат" - 3 - вся разница
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34052005
alexx726
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты не сможешь отрисовать эту долбаную таблицу таким способом (этот вариант я уже проходил)
Точнее, не так - ты сможешь её отрисовать как обычную табличку. Дальше начинаюца заморочки - сортировка, группировка, resize, желание установить свой Border, L&F и т.д.
А все-таки, так и непонятно, чем заказчика не устраивает 2(3) таблицы, учитывая, что он их даже не "распознает" (кроме ScrollBar)
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34073807
Фотография Alex-2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу!
Lusy &&
...
Рейтинг: 0 / 0
Как в JTable "заморозить" несколько рядов и колонок?
    #34073831
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexx726А все-таки, так и непонятно, чем заказчика не устраивает 2(3) таблицы, учитывая, что он их даже не "распознает" (кроме ScrollBar)
Вот это вот -



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


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

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

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

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

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

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

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

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

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

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


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