不知道如何写标题而不使它成为一个段落。
基本上我的JTable
程序中有一个不能让用户编辑的内容。但是程序必须能够自己编辑它。此外,必须允许用户从表格中的单元格中实际选择和复制文本,而不是对其进行编辑。
我怎样才能做到这一点?最好是通用解决方案,以便它可以应用于我的程序中具有不同布局等的多个表。
不知道如何写标题而不使它成为一个段落。
基本上我的JTable
程序中有一个不能让用户编辑的内容。但是程序必须能够自己编辑它。此外,必须允许用户从表格中的单元格中实际选择和复制文本,而不是对其进行编辑。
我怎样才能做到这一点?最好是通用解决方案,以便它可以应用于我的程序中具有不同布局等的多个表。
您需要将表格的选择属性设置为 true,如下所示。您还必须确保该isCellEditable
方法被覆盖并设置为 false,AbstractTableModel
该类默认执行此操作。
final JTable table = new JTable(new AbstractTableModel() {
@Override
public Object getValueAt(int r, int c) {
return data[r][c];
}
@Override
public int getRowCount() {
return data.length;
}
@Override
public int getColumnCount() {
return data[1].length;
}
});
table.setRowSelectionAllowed(true);
table.setColumnSelectionAllowed(true);
table.setCellSelectionEnabled(true);
这将允许单独突出显示单元格并从中复制,但不允许编辑单元格。
编辑:改变答案!
Tom 的解决方案允许您单击一个单元格并按 Ctrl+C 复制其全部内容。如果您希望能够选择单元格内的文本区域,您可以执行以下操作:
JTable table = new JTable(...);
JTextField textField = new JTextField();
textField.setEditable(false);
table.setDefaultEditor(String.class, new javax.swing.DefaultCellEditor(textField));
然后确保您TableModel.isCellEditable
返回true
任何您希望能够从中复制的单元格。
(如果你走这条路,你可以跳过允许/启用行/列/单元格选择。)