package com.vistatec.ocelot.lqi.gui.editor; import java.awt.Component; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import javax.swing.DefaultCellEditor; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextArea; import javax.swing.JTextField; /** * Cell editor displaying a text area. */ public class TextAreaTableCellEditor extends DefaultCellEditor { /** The serial version UID. */ private static final long serialVersionUID = 7243499768414128027L; /** The text area. */ private JTextArea txtArea; /** * Constructor. */ public TextAreaTableCellEditor() { super(new JTextField()); setClickCountToStart(2); } /* * (non-Javadoc) * @see javax.swing.DefaultCellEditor#getTableCellEditorComponent(javax.swing.JTable, java.lang.Object, boolean, int, int) */ @Override public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, int row, int column) { txtArea = new JTextArea(); if (value != null) { txtArea.setText((String) value); } txtArea.setWrapStyleWord(true); txtArea.setLineWrap(true); txtArea.setBackground(table.getBackground()); txtArea.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { //do nothing } @Override public void keyReleased(KeyEvent e) { //do nothing } @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER){ stopCellEditing(); table.getSelectionModel().clearSelection(); } } }); JScrollPane scrollpane = new JScrollPane(txtArea); scrollpane.setSize(table.getColumnModel().getColumn(column).getWidth(), table.getRowHeight()); return scrollpane; } /* * (non-Javadoc) * @see javax.swing.DefaultCellEditor#getCellEditorValue() */ @Override public Object getCellEditorValue() { return txtArea.getText(); } /* * (non-Javadoc) * @see javax.swing.DefaultCellEditor#isCellEditable(java.util.EventObject) */ @Override public boolean isCellEditable(java.util.EventObject anEvent) { return anEvent instanceof MouseEvent && ((MouseEvent) anEvent).getButton() == MouseEvent.BUTTON1 && ((MouseEvent) anEvent).getClickCount() == 2; } }