【发布时间】:2018-02-24 04:12:53
【问题描述】:
同时使用单元格渲染器和编辑器,但滚动条仍然不起作用 请建议任何使它起作用的东西 滚动条根本不动
类 MultiRowCell 扩展 AbstractCellEditor 实现 TableCellEditor、TableCellRenderer {
private JScrollPane scrollPane;
private JTextArea textArea;
public MultiRowCell() {
textArea = new JTextArea();
textArea.setEditable(true);
scrollPane = new JScrollPane(textArea);
}
@Override
public boolean isCellEditable(EventObject e) {
System.out.println(e);
return true;
}
@Override
public Object getCellEditorValue() {
return textArea.getText();
}
protected void setCellValue(Object value) {
if (value == null) {
textArea.setText(null);
} else {
textArea.setText(value.toString());
}
textArea.setCaretPosition(0);
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
setCellValue(value);
return scrollPane;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setCellValue(value);
return scrollPane;
}
}
//TextTableCellRenderer tr=new TextTableCellRenderer();
//table.getColumnModel().getColumn(1).setCellEditor(tr);
MultiRowCell re=new MultiRowCell();
table.getColumnModel().getColumn(1).setCellRenderer(re);
table.getColumnModel().getColumn(1).setCellEditor(re);
//table.getColumnModel().getColumn(1).setCellRenderer(r);
//table.getColumnModel().getColumn(1).setCellEditor(e);
//table.getColumnModel().getColumn(2).setCellRenderer(r);
//table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
panel.setLayout(new BorderLayout());
panel.add(table, BorderLayout.CENTER);
panel.add(table.getTableHeader(), BorderLayout.NORTH);
return panel;
【问题讨论】:
-
我认为您需要采取的第一步是查看Concepts: Editors and Renderers 以了解渲染器实际上是什么
JTable(和其他Swing 组件)如何使用它们。然后我认为你需要弄清楚将你的代码变成一个单元格编辑器并从那个方向使用它 -
对于example
-
其实我已经尝试过了,但找不到出路。你能详细说明一下吗?@MadProgrammer
-
现在看,我尝试在单元格中添加编辑器和渲染器,但仍然没有任何反应
-
您的示例仍然使用单元格渲染器
标签: java swing tablecellrenderer