2
2
3
3
import com .intellij .openapi .editor .markup .TextAttributes ;
4
4
import com .intellij .openapi .util .UserDataHolder ;
5
+ import com .intellij .ui .components .JBScrollPane ;
5
6
import net .seesharpsoft .intellij .plugins .csv .editor .CsvEditorSettingsExternalizable ;
6
7
import net .seesharpsoft .intellij .plugins .csv .settings .CsvColorSettings ;
7
8
18
19
import java .util .Set ;
19
20
import java .util .concurrent .CopyOnWriteArraySet ;
20
21
21
- public class MultiLineCellRenderer extends JTextArea implements TableCellRenderer , TableCellEditor {
22
+ public class MultiLineCellRenderer extends JBScrollPane implements TableCellRenderer , TableCellEditor {
22
23
23
24
private Set <CellEditorListener > cellEditorListenerSet = new CopyOnWriteArraySet <>();
24
- private final UserDataHolder userDataHolder ;
25
+ private final UserDataHolder myUserDataHolder ;
26
+
27
+ private JTextArea myTextArea ;
25
28
26
29
public MultiLineCellRenderer (CsvTableEditorKeyListener keyListener , UserDataHolder userDataHolderParam ) {
27
- setLineWrap (true );
28
- setWrapStyleWord (true );
29
- setOpaque (true );
30
- addKeyListener (keyListener );
31
- this .userDataHolder = userDataHolderParam ;
30
+ this .myUserDataHolder = userDataHolderParam ;
31
+ myTextArea = new JTextArea ();
32
+ myTextArea .setLineWrap (true );
33
+ myTextArea .setWrapStyleWord (true );
34
+ myTextArea .setOpaque (true );
35
+ myTextArea .setBorder (null );
36
+ myTextArea .addKeyListener (keyListener );
37
+ this .setOpaque (true );
38
+ this .setViewportView (myTextArea );
32
39
}
33
40
34
41
private TextAttributes getColumnTextAttributes (int column ) {
35
42
if (CsvEditorSettingsExternalizable .getInstance ().isTableColumnHighlightingEnabled ()) {
36
- return CsvColorSettings .getTextAttributesOfColumn (column , userDataHolder );
43
+ return CsvColorSettings .getTextAttributesOfColumn (column , myUserDataHolder );
37
44
}
38
45
return null ;
39
46
}
@@ -48,6 +55,7 @@ private Color getColumnBackgroundColor(int column, Color fallback) {
48
55
return textAttributes == null || textAttributes .getBackgroundColor () == null ? fallback : textAttributes .getBackgroundColor ();
49
56
}
50
57
58
+ @ Override
51
59
public Component getTableCellRendererComponent (JTable table , Object value , boolean isSelected , boolean hasFocus , int row , int column ) {
52
60
if (isSelected ) {
53
61
setForeground (table .getSelectionForeground ());
@@ -56,7 +64,6 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole
56
64
setForeground (getColumnForegroundColor (column , table .getForeground ()));
57
65
setBackground (getColumnBackgroundColor (column , table .getBackground ()));
58
66
}
59
- setFont (table .getFont ());
60
67
if (hasFocus ) {
61
68
setBorder (UIManager .getBorder ("Table.focusCellHighlightBorder" ));
62
69
if (table .isCellEditable (row , column )) {
@@ -66,24 +73,27 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole
66
73
} else {
67
74
setBorder (new EmptyBorder (1 , 2 , 1 , 2 ));
68
75
}
69
- setText ((value == null ) ? "" : value .toString ());
70
76
71
77
final int columnWidth = table .getColumnModel ().getColumn (column ).getWidth ();
72
78
final int rowHeight = table .getRowHeight (row );
79
+ this .setFont (table .getFont ());
73
80
this .setSize (columnWidth , rowHeight );
74
81
this .validate ();
82
+ myTextArea .setText ((value == null ) ? "" : value .toString ());
83
+ myTextArea .setFont (table .getFont ());
84
+ myTextArea .setSize (columnWidth , rowHeight );
85
+ myTextArea .validate ();
75
86
76
87
return this ;
77
88
}
78
89
79
90
@ Override
80
91
public Dimension getPreferredSize () {
81
92
try {
82
- final Rectangle rectangle = this .modelToView (getDocument ().getLength ());
93
+ final Rectangle rectangle = myTextArea .modelToView (myTextArea . getDocument ().getLength ());
83
94
if (rectangle != null ) {
84
95
return new Dimension (this .getWidth (),
85
- this .getInsets ().top + rectangle .y + rectangle .height +
86
- this .getInsets ().bottom );
96
+ this .getInsets ().top + rectangle .y + rectangle .height + this .getInsets ().bottom );
87
97
}
88
98
} catch (BadLocationException e ) {
89
99
e .printStackTrace ();
@@ -99,7 +109,7 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean
99
109
100
110
@ Override
101
111
public Object getCellEditorValue () {
102
- return this .getText ();
112
+ return myTextArea .getText ();
103
113
}
104
114
105
115
@ Override
0 commit comments