默认渲染器/编辑器不支持多行。您可以尝试使用自定义TableCellEditor
/ TableCellRenderer
。JTextArea
在表格单元格中检查下一个示例:
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
public class TestFrame extends JFrame {
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
JTable t = new JTable(new Object[][]{{"a\n\rb","1"},{"a\n\rb","2"}},new Object[]{1,2});
add(new JScrollPane(t));
t.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaColumn());
t.getColumnModel().getColumn(0).setCellEditor(new JTextAreaColumn());
t.setRowHeight(50);
}
public static void main(String args[]) {
new TestFrame();
}
private class JTextAreaColumn extends AbstractCellEditor implements TableCellRenderer,TableCellEditor {
private JTextArea area = new JTextArea();
private JScrollPane pane = new JScrollPane(area);
@Override
public Object getCellEditorValue() {
return area.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
area.setText(value == null ? "" : value.toString());
return pane;
}
private void setColor(boolean isSelected, JTable table) {
area.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
area.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
area.setText(value == null ? "" : value.toString());
setColor(isSelected,table);
return pane;
}
}
}

阅读更多教程
编辑:
接下来试试,看来是你想要的了;
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.CellEditorListener;
import javax.swing.event.ChangeEvent;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
public class TestFrame extends JFrame {
private JTable t;
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
t = new JTable(new Object[][]{{"a\n\rb","1"},{"a\n\rb\n\rb\n\rb\n\rb","2"}},new Object[]{1,2});
add(new JScrollPane(t));
t.getColumnModel().getColumn(0).setCellRenderer(new JTextAreaColumn());
JTextAreaColumn editor = new JTextAreaColumn();
editor.addCellEditorListener(getEditorListener());
t.getColumnModel().getColumn(0).setCellEditor(editor);
updateRowHeights(t);
}
private CellEditorListener getEditorListener() {
return new CellEditorListener() {
@Override
public void editingStopped(ChangeEvent e) {
updateRowHeights(t);
}
@Override
public void editingCanceled(ChangeEvent e) {
updateRowHeights(t);
}
};
}
private void updateRowHeights(JTable table) {
try {
for (int row = 0; row < table.getRowCount(); row++) {
int rowHeight = table.getRowHeight();
for (int column = 0; column < table.getColumnCount(); column++) {
Component comp = table.prepareRenderer(
table.getCellRenderer(row, column), row, column);
rowHeight = Math.max(rowHeight,
comp.getPreferredSize().height);
}
table.setRowHeight(row, rowHeight);
}
} catch (ClassCastException e) {
}
}
public static void main(String args[]) {
new TestFrame();
}
private class JTextAreaColumn extends AbstractCellEditor implements TableCellRenderer,TableCellEditor {
private JTextArea area = new JTextArea();
private JScrollPane pane = new JScrollPane(area);
@Override
public Object getCellEditorValue() {
return area.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table,
Object value, boolean isSelected, int row, int column) {
area.setText(value == null ? "" : value.toString());
return pane;
}
private void setColor(boolean isSelected, JTable table) {
area.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
area.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, int row,
int column) {
area.setText(value == null ? "" : value.toString());
setColor(isSelected,table);
return area;
}
}
}