das
[spoiler]```public class TableEnterTest {
private static final String INSERT_BREAK = “insert-break”;
private static final String TEXT_SUBMIT = “text-submit”;
public static void main(String[] args) {
final List<String> data = new ArrayList<String>(Arrays.asList(
"Test1
Test2", “Test1
Test2”, “Test1
Test2”,
“Test1
Test2”, “Test1
Test2”, “Test1
Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2 Test2
Test3”, “Test1
Test2”, “Test1
Test2”,
“Test1
Test2”, “Test1
Test2”, “Test1
Test2”));
DefaultTableModel defaultTableModel = new DefaultTableModel(
data.size(), 1) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return String.class;
}
@Override
public Object getValueAt(int row, int column) {
return data.get(row);
}
@Override
public boolean isCellEditable(int row, int column) {
return true;
}
@Override
public void setValueAt(Object aValue, int row, int column) {
data.remove(row);
data.add(row, (String) aValue);
}
};
JTable jTable = new JTable(defaultTableModel);
final JTextArea rendererComponent = new JTextArea();
rendererComponent.setWrapStyleWord(true);
rendererComponent.setLineWrap(true);
setCellRenderer(jTable, rendererComponent);
setCellEditor(jTable, rendererComponent);
jTable.setRowHeight(60);
JOptionPane.showMessageDialog(null, jTable, "Abort Test",
JOptionPane.PLAIN_MESSAGE);
}
private static void setCellEditor(JTable jTable,
final JTextArea rendererComponent) {
class TextAreaCellEditor extends AbstractCellEditor implements
TableCellEditor {
@Override
public Object getCellEditorValue() {
return rendererComponent.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
rendererComponent.setText((String) value);
return rendererComponent;
// return new JScrollPane( rendererComponent);
}
}
final TableCellEditor tableCellEditor = (TableCellEditor) new TextAreaCellEditor();
KeyStroke enter = KeyStroke.getKeyStroke("ENTER");
KeyStroke altEnter = KeyStroke.getKeyStroke("alt ENTER");
InputMap input = rendererComponent.getInputMap();
input.put(altEnter, INSERT_BREAK);
input.put(enter, TEXT_SUBMIT);
ActionMap actions = rendererComponent.getActionMap();
actions.put(TEXT_SUBMIT, new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
tableCellEditor.stopCellEditing();
}
});
rendererComponent.getActionMap().put("released", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent arg0) {
tableCellEditor.stopCellEditing();
}
});
jTable.setDefaultEditor(String.class, tableCellEditor);
}
private static void setCellRenderer(JTable jTable,
final JTextArea rendererComponent) {
DefaultTableCellRenderer tableCellRenderer = new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
Component defaultComponent = super
.getTableCellRendererComponent(table, value,
isSelected, hasFocus, row, column);
rendererComponent.setBackground(defaultComponent
.getBackground());
rendererComponent.setForeground(defaultComponent
.getForeground());
rendererComponent.setFont(defaultComponent.getFont());
rendererComponent.setBorder(((JComponent) defaultComponent)
.getBorder());
rendererComponent.setText((String) value);
return rendererComponent;
}
};
jTable.setDefaultRenderer(String.class, tableCellRenderer);
}
}```[/spoiler]
ist ziehmlich “excel-like”:
Enter
beendet Editieren,
Alt+Enter
fügt Zeilenumbruch ein
und shift+enter
beendet den Dialog.
Leider klappt die aktivierung nicht mehr, sobald der Editor 'ne JScollPane bekommt…
bye
TT