当我点击JTable单元格时,我想选择整行和整列。
我尝试setRowSelectionAllowed(true)和setColumnSelectionAllowed(true),然后指定了selectionInterval,但它只选择了单个单元格!
我该怎么做?
答案 0 :(得分:0)
您可以提供自己的单元格自定义突出显示。
查看Table Row Rendering,了解如何在行级别完成此操作。
您可以看到此方法是否也适用于列级别。主要问题是随着列选择的改变,整个前一列也需要重新绘制。不确定JTable当前如何处理这个问题。
答案 1 :(得分:0)
正如@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()方法。希望这会有所帮助:)