我用a JTable来显示一些数据.用户只能选择整行而JTable不是单个单元格.这是用于仅允许行选择的代码:
jTable1.setCellSelectionEnabled(false);
jTable1.setColumnSelectionEnabled(false);
jTable1.setRowSelectionAllowed(true);
jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
Run Code Online (Sandbox Code Playgroud)
但是当用户选择一行时,该行中的单元格会被勾勒出来(下图中的第一列/最后一行):

如何禁用此大纲?
你可以简单地DefaultTableCellRenderer从UI的角度扩展和假装单元格不是"聚焦"的.
我使用以下渲染器删除了边框:
private static class BorderLessTableCellRenderer extends DefaultTableCellRenderer {
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(
final JTable table,
final Object value,
final boolean isSelected,
final boolean hasFocus,
final int row,
final int col) {
final boolean showFocusedCellBorder = false; // change this to see the behavior change
final Component c = super.getTableCellRendererComponent(
table,
value,
isSelected,
showFocusedCellBorder && hasFocus, // shall obviously always evaluate to false in this example
row,
col
);
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样在JTable上设置它:
table.setDefaultRenderer( Object.class, new BorderLessTableCellRenderer() );
Run Code Online (Sandbox Code Playgroud)
或者,对于字符串:
table.setDefaultRenderer( String.class, new BorderLessTableCellRenderer() );
Run Code Online (Sandbox Code Playgroud)
这是一个黑客,它只是重复使用原始渲染器并假装聚焦/选定的单元格不是,但它应该让你开始.
| 归档时间: |
|
| 查看次数: |
2042 次 |
| 最近记录: |