当前位置: 首页 > 面试题库 >

Swing JTable-用与选定行其余部分不同的颜色突出显示选定的单元格吗?

靳祺然
2023-03-14
问题内容

我有一个基本的Swing JTable,要求是在任何单元格上单击时,都应突出显示整个行,并且单击的单元格应与突出显示的行的其余部分具有不同的颜色。

当前,我具有 isRowSelecthtml" target="_blank">ionAllowedtrue

我尝试使用自定义 TableCellRenderer ,如下所示:

public class CustomTableCellRenderer extends DefaultTableCellRenderer
{

public static final DefaultTableCellRenderer    DEFAULT_RENDERER    = new DefaultTableCellRenderer();
    @Override
  public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);

    if (isSelected) {
        c.setBackground(Color.red);
    }
    else {
        c.setForeground(Color.black);
        c.setBackground(Color.white);
    }
    return c;   
  }     
}

但这似乎不起作用(整个行以红色突出显示)。

我还尝试如下设置UIManager属性:

UIManager.put("Table.focusCellBackground", 
         new javax.swing.plaf.ColorUIResource (Color.red));

但这似乎也不起作用(即使当我尝试使用

UIManager.put("Table.focusCellHighlightBorder", 
         new BorderUIResource.LineBorderUIResource(Color.red));

效果很好)

您能给我一些建议吗?


问题答案:

试试这个:

jtable.setCellSelectionEnabled(true);

然后在 getTableCellRendererComponent

if (table.isCellSelected(row, column))
    setForeground(Color.red);
else if (table.isRowSelected(row))
    setForeground(Color.green);
else if (table.isColumnSelected(column))
    setForeground(Color.blue);
else
    setForeground(Color.black);

这将使选定的单元格显示为红色,行的其余部分显示为绿色,而列的其余部分显示为蓝色。注意:单元格选择要求选择模型为单个,其他选择模型可能会导致不可预测的行为。



 类似资料:
  • 问题内容: 有没有一种方法可以设置Windows 7的Aero主题中SWT表(FULL_SELECTION样式)的突出显示行的背景颜色?看来这是从表格的背景色派生而来的浅色。但是除此之外,我似乎对使用哪种颜色没有太多控制。 这对我们来说是个问题,因为我们某些表项的文本(前景)为灰白色,因此如果在浅色背景上选择该行,则很难阅读。我已经将表格的背景色设置为“黑色”,但是文本仍然很难看清。 关于如何控制

  • 实际行为 预期行为 至于我使用的代码,主加载了一个,其中调度页是真正的罪魁祸首,扩展了Xamarin.Forms.TabbedPage。SelectedPage被正确设置(加载正确的contentpage),但选项卡没有突出显示。 null

  • 问题内容: 我找不到能帮助我解决Angular中这个简单问题的东西。与位置路径进行比较时,所有答案都与导航栏相关。 我使用list和构建了一个动态表。当我单击一行时,我试图为该行分配一个css类(选中),以突出显示该行已被用户选中的事实,并从先前突出显示的行中删除了该行。 我缺少在选定的行和CSS类分配之间进行绑定的方法。 我在每个()上应用了代码, 但我缺少应用更改的逻辑。 我的代码-Plunk

  • 我使用gridview在我的gridview中选择多个项目(图像)。 我使用< code > MultiChoiceModeListener 来实现这一点,问题是选中的项目没有突出显示 选择器xml: 当我触摸一个项目时,它被蓝色覆盖(我认为这是因为我使用了< code > GridView . setdrawselectorontop(true);)...我一抬起手指,蓝色就消失了。 我希望选择

  • 我有一个Gridview,当我按下某个元素时,我想绘制背景。 我有一个适配器来动态加载gridview元素。我在适配器上有一个侦听器。在这个侦听器上,我用我想要的颜色放置背景,但它也会在列表中绘制另一个元素(我猜是在视图重新加载后,位置相同的元素)。 重要提示:我的最小API是9,我无法真正更改它。 以下是我的 getView 方法的代码(来自适配器): 下面是线性布局的侦听器(表示每个项目):

  • 问题内容: 我有此代码从如何突出显示jtable中的多个单元格: 但是,当我用它突出显示一个单元格时,它会执行错误的操作,就像丢失整个数据一样。Iam是Java Swing的新手。请帮助使单元格在按钮按下动作事件中突出显示。 更新:添加我的示例代码: 我想要的是单击按钮,我只想突出显示单元格编号1(Row1-Column1)。 问题答案: 我使用此类来设置JTables的样式 创建此类的实例,并将