Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Организация взаимодействия TableCellEditor'а и TableCellRenderer'а / 1 сообщений из 1, страница 1 из 1
13.12.2006, 23:36:49
    #34198284
diablero
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Организация взаимодействия TableCellEditor'а и TableCellRenderer'а
Не могу решить две задачи:
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
Форумы / Java [игнор отключен] [закрыт для гостей] / Организация взаимодействия TableCellEditor'а и TableCellRenderer'а / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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