22
33import com .intellij .openapi .editor .markup .TextAttributes ;
44import com .intellij .openapi .util .UserDataHolder ;
5+ import com .intellij .ui .components .JBScrollPane ;
56import net .seesharpsoft .intellij .plugins .csv .editor .CsvEditorSettingsExternalizable ;
67import net .seesharpsoft .intellij .plugins .csv .settings .CsvColorSettings ;
78
1819import java .util .Set ;
1920import java .util .concurrent .CopyOnWriteArraySet ;
2021
21- public class MultiLineCellRenderer extends JTextArea implements TableCellRenderer , TableCellEditor {
22+ public class MultiLineCellRenderer extends JBScrollPane implements TableCellRenderer , TableCellEditor {
2223
2324 private Set <CellEditorListener > cellEditorListenerSet = new CopyOnWriteArraySet <>();
24- private final UserDataHolder userDataHolder ;
25+ private final UserDataHolder myUserDataHolder ;
26+
27+ private JTextArea myTextArea ;
2528
2629 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 );
3239 }
3340
3441 private TextAttributes getColumnTextAttributes (int column ) {
3542 if (CsvEditorSettingsExternalizable .getInstance ().isTableColumnHighlightingEnabled ()) {
36- return CsvColorSettings .getTextAttributesOfColumn (column , userDataHolder );
43+ return CsvColorSettings .getTextAttributesOfColumn (column , myUserDataHolder );
3744 }
3845 return null ;
3946 }
@@ -48,6 +55,7 @@ private Color getColumnBackgroundColor(int column, Color fallback) {
4855 return textAttributes == null || textAttributes .getBackgroundColor () == null ? fallback : textAttributes .getBackgroundColor ();
4956 }
5057
58+ @ Override
5159 public Component getTableCellRendererComponent (JTable table , Object value , boolean isSelected , boolean hasFocus , int row , int column ) {
5260 if (isSelected ) {
5361 setForeground (table .getSelectionForeground ());
@@ -56,7 +64,6 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole
5664 setForeground (getColumnForegroundColor (column , table .getForeground ()));
5765 setBackground (getColumnBackgroundColor (column , table .getBackground ()));
5866 }
59- setFont (table .getFont ());
6067 if (hasFocus ) {
6168 setBorder (UIManager .getBorder ("Table.focusCellHighlightBorder" ));
6269 if (table .isCellEditable (row , column )) {
@@ -66,24 +73,27 @@ public Component getTableCellRendererComponent(JTable table, Object value, boole
6673 } else {
6774 setBorder (new EmptyBorder (1 , 2 , 1 , 2 ));
6875 }
69- setText ((value == null ) ? "" : value .toString ());
7076
7177 final int columnWidth = table .getColumnModel ().getColumn (column ).getWidth ();
7278 final int rowHeight = table .getRowHeight (row );
79+ this .setFont (table .getFont ());
7380 this .setSize (columnWidth , rowHeight );
7481 this .validate ();
82+ myTextArea .setText ((value == null ) ? "" : value .toString ());
83+ myTextArea .setFont (table .getFont ());
84+ myTextArea .setSize (columnWidth , rowHeight );
85+ myTextArea .validate ();
7586
7687 return this ;
7788 }
7889
7990 @ Override
8091 public Dimension getPreferredSize () {
8192 try {
82- final Rectangle rectangle = this .modelToView (getDocument ().getLength ());
93+ final Rectangle rectangle = myTextArea .modelToView (myTextArea . getDocument ().getLength ());
8394 if (rectangle != null ) {
8495 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 );
8797 }
8898 } catch (BadLocationException e ) {
8999 e .printStackTrace ();
@@ -99,7 +109,7 @@ public Component getTableCellEditorComponent(JTable table, Object value, boolean
99109
100110 @ Override
101111 public Object getCellEditorValue () {
102- return this .getText ();
112+ return myTextArea .getText ();
103113 }
104114
105115 @ Override
0 commit comments