powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Организация взаимодействия TableCellEditor'а и TableCellRenderer'а
1 сообщений из 1, страница 1 из 1
Организация взаимодействия TableCellEditor'а и TableCellRenderer'а
    #34198284
diablero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу решить две задачи:
1. Если выставлять высоту ячеек из рендерера то таблица мерцает. Как правельно это делать чтобы не было постоянных обновлений ?
2. При редактироавнии данных в ячейке, для удобства решил во время редактирования менять ее высоту, но столкнулся с проблемой следующей. Если таблица из одной колонки все норамально, а если из двух и более то рендерер не дает эдитору поменять размер высоты строки. Как только не извращался ничего не выходит.

P.S. Заметил такую вещь, если дебагером следить за рендером, то раз через несколько в нем твориться что попало, то высота строк не вычисляеться, то данные в JTextArea вообще не присваиваются.
Код: 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.
 import  javax.swing.*;
 import  javax.swing.table.DefaultTableCellRenderer;
 import  javax.swing.table.TableColumnModel;
 import  java.awt.*;
 import  java.util.Date;

 public   class  DataTableCellRenderer  extends  DefaultTableCellRenderer
{
     public  Component getTableCellRendererComponent(JTable table, Object value,
                                                    boolean  isSelected,  boolean  hasFocus,
                                                    int  row,  int  column)
    {
        TableColumnModel columnModel = table.getColumnModel();
         int  columnWidth = columnModel.getColumn(column).getWidth();

         if (value== null ) value = "";
         if (value  instanceof  String)
        {
            JTextArea text =  new  JTextArea();
            text.setWrapStyleWord(true);
            text.setLineWrap(true);

             if  (isSelected)
            {
                text.setOpaque(true);
                text.setForeground(table.getSelectionForeground());
                text.setBackground(table.getSelectionBackground());
            }
             else 
            {
                text.setForeground(table.getForeground());
                text.setBackground(table.getBackground());
            }
            text.setFont(table.getFont());
            text.setText((String) value);
            text.setSize(columnWidth,  100000 );

             int  height = ( int )text.getPreferredSize().getHeight();

             if  (table.getRowHeight(row) != height)
                table.setRowHeight(row, height);

             return  text;
        }
         if (value  instanceof  ImageIcon)
        {
            setIcon((ImageIcon)value);
            setHorizontalAlignment(JLabel.CENTER);
            setSize(columnWidth,  100000 );
             int  height = ( int )getPreferredSize().getHeight();
             if  (table.getRowHeight(row) != height)
               table.setRowHeight(row, height);

             return   this ;
        }
         if (value  instanceof  Date)
        {

        }
         return   null ;
    }
}
Код: 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.
 import  javax.swing.*;
 import  javax.swing.table.TableCellEditor;
 import  java.awt.*;
 import  java.awt.event.FocusEvent;
 import  java.awt.event.FocusListener;
 import  java.awt.event.MouseEvent;
 import  java.util.EventObject;
 import  java.util.Date;

 public   class  TextCellEditor  extends  AbstractCellEditor  implements  TableCellEditor
{
     private  JTextArea textArea;

     public  TextCellEditor()
    {
        textArea =  new  JTextArea();
        textArea.setWrapStyleWord(true);
        textArea.setLineWrap(true);
        textArea.addFocusListener( new  JTextAreaFocusListener());
    }
     public  Component getTableCellEditorComponent(JTable table, Object value,
                                                  boolean  isSelected,
                                                  int  row,  int  column) {
         if (value  instanceof  String)
        {
            String str = (String)value;
            textArea.setText(str);

            FontMetrics metrics = textArea.getFontMetrics((textArea.getFont()));
             int  stringWidth = metrics.stringWidth(str);
             int  columnWidth = table.getColumnModel().getColumn(column).getWidth();
             if (stringWidth < columnWidth)
               table.setRowHeight(row,  48 );
             return   new  JScrollPane(textArea);
        }
         if (value  instanceof  ImageIcon)
        {

        }
         if (value  instanceof  Date)
        {

        }
         return   null ;
    }

     public  Object getCellEditorValue()
    {
         return  textArea.getText();
    }

     public   boolean  isCellEditable(EventObject anEvent)
    {
         if  (anEvent  instanceof  MouseEvent) {
         if  (((MouseEvent)anEvent).getClickCount() <  2 )
             return  false;
        }
         return  true;
    }
     class  JTextAreaFocusListener  implements  FocusListener
    {
          public   void  focusGained(FocusEvent e)
         {

         }
          public   void  focusLost(FocusEvent e)
         {
              if  (e.getSource()  instanceof  JTextArea)
             {
                 textArea.setText(((JTextArea)e.getSource()).getText());
         }}}
}

...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Организация взаимодействия TableCellEditor'а и TableCellRenderer'а
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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