JTable 上的行和列选择
Both row and column selection on JTable
当我点击一个 JTable 单元格时,我想 select 它的整行和整列。
我尝试了 setRowSelectionAllowed(true) 和 setColumnSelectionAllowed(true) 然后指定了一个 selectionInterval 但它 select 只有单个单元格!
我该怎么做?
您可以提供自己的单元格自定义突出显示。
查看 Table Row Rendering 示例,了解如何在行级别完成此操作。
您可以看看这种方法是否也适用于列级别。主要问题是,随着列选择的变化,整个先前的列也需要重新绘制。不确定 JTable 当前如何处理此问题。
正如@camickr 所指出的,您可能需要使用 table 渲染来执行此操作。这可能不是最佳答案,但这是我能想到的:
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;
}
});
new Color(57, 105, 138) 是我默认的 JTable 选择颜色(我不知道它是否与不同的 jdk 版本不同)。 else 语句中的颜色是我默认的 JTable 未选择的颜色。此外,在您的侦听器中添加 repaint() 方法。希望这会有所帮助:)
当我点击一个 JTable 单元格时,我想 select 它的整行和整列。
我尝试了 setRowSelectionAllowed(true) 和 setColumnSelectionAllowed(true) 然后指定了一个 selectionInterval 但它 select 只有单个单元格!
我该怎么做?
您可以提供自己的单元格自定义突出显示。
查看 Table Row Rendering 示例,了解如何在行级别完成此操作。
您可以看看这种方法是否也适用于列级别。主要问题是,随着列选择的变化,整个先前的列也需要重新绘制。不确定 JTable 当前如何处理此问题。
正如@camickr 所指出的,您可能需要使用 table 渲染来执行此操作。这可能不是最佳答案,但这是我能想到的:
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;
}
});
new Color(57, 105, 138) 是我默认的 JTable 选择颜色(我不知道它是否与不同的 jdk 版本不同)。 else 语句中的颜色是我默认的 JTable 未选择的颜色。此外,在您的侦听器中添加 repaint() 方法。希望这会有所帮助:)