[英]Both row and column selection on JTable
当我单击JTable单元格时,我想选择其整个行和整个列。
我尝试设置setRowSelectionAllowed(true)和setColumnSelectionAllowed(true),然后指定了selectionInterval,但它仅选择单个单元格!
我怎样才能做到这一点?
您可能可以提供自己的自定义单元格突出显示。
请查看“ 表行渲染” ,以获取在行级别执行此操作的示例。
您可以看到这种方法是否也适用于列级别。 主要问题是,随着列选择的更改,整个上一列也将需要重新粉刷。 不确定JTable当前如何处理此问题。
正如@camickr指出的那样,您可能需要使用表渲染来执行此操作。 这可能不是最佳答案,但这是我可以想到的:
table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (column == table.getSelectedColumn()) {
c.setBackground(new Color (57, 105, 138));
c.setForeground(Color.white);
} else if (row == table.getSelectedRow()) {
c.setBackground(new Color (57, 105, 138));
c.setForeground(Color.white);
} else {
if (row % 2 == 0) {
c.setBackground(Color.white);
c.setForeground(Color.black);
} else {
c.setBackground(new Color(242, 242, 242));
c.setForeground(Color.black);
}
}
return c;
}
});
新的Color(57,105,138)是我默认的JTable选择的颜色(我不知道它是否与不同的jdk版本不同)。 else语句中的颜色是我的默认JTable未选择的颜色。 另外,在您的侦听器中添加repaint()方法。 希望这可以帮助 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.