【问题标题】:Multiline JTable Cells are not multilined during editing多行 JTable 单元格在编辑期间不是多行的
【发布时间】:2012-09-11 22:01:35
【问题描述】:

我正在开发一个应用程序,它有一个需要多行单元格的 JTable。因此我扩展了 JTextArea 并且一切都显示出来了,但是当我尝试编辑一个单元格时。文本显示为单行,编辑后变为多行。我希望文本在编辑过程中保持多行。 有没有办法做到这一点?

【问题讨论】:

  • 你读过教程吗?如果您这样做了,您会发现编辑器和渲染器之间存在差异。如果您确实阅读了教程,那么您应该知道这一点并告诉我们您的编辑器和渲染器。不好的问题,因为它缺少必要的细节。
  • 另见TablePopupEditor

标签: java swing jtable jtextarea


【解决方案1】:

使用 JTextArea(而不是使用 JTextField 的默认行为)创建您的 TableCellEditor,并将其设置为您的 JTable。

如果您愿意,也可以使用 JEditorPane 来支持文本样式。

---- 编辑2 ----

新的 TableCellEditor:

 class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor {

 JComponent component = new JTextArea();

 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected,
 int rowIndex, int vColIndex) {

 ((JTextArea) component).setText((String) value);

 return component;
 }

 public Object getCellEditorValue() {
 return ((JTextArea) component).getText();
 }
 }

【讨论】:

  • @Igor 重新阅读答案。它说您应该为 TableCellEditor 使用 JTextArea。据我了解您的问题,您正在为 TableCellRenderer 使用 JTextArea。查看更多关于渲染器和编辑器的信息here
  • 从您的问题中我所能理解的只是您使用的是自定义 TableCellRenderer,而不是自定义 TableCellEditor。如果不是这种情况,那么您应该尝试调查为什么在编辑单元格时您的换行符没有传输到您的编辑器。或者你可以使用另一个组件来编辑它。
  • @Igor 他的回答是正确的。注意他说的是TableCellEditor而不是TableCellRenderer。编辑器是用户编辑单元格时显示的内容,它与渲染器不同。如果您这样做了,但仍然遇到问题,请尝试使用 JTextArea.setRows 设置编辑器上的行数(尽管我认为这没有必要)。
  • 对不起,我的错。我以为是一样的。那可以解决我的问题。在我选择它作为答案之前,您能否在答案中添加一个简短的示例。谢谢。
  • 谢谢,在等待的时候我创建了一个自己的单元编辑器。一切正常,** 除了它不会添加新行,直到我在编辑单元格后点击离开。**无论如何,我会选择你的答案,因为它很好地描述了这个过程。
猜你喜欢
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2015-09-11
  • 1970-01-01
相关资源
最近更新 更多