突出显示JTable中带有图标的单元格 - java

我有一个3列的JTable。 1.图标,2.文件或文件夹的名称,3.文件类型或“文件夹”。我在getTableCellRendererComponent方法中使用JLabel(设置背景+ png图像)绘制图标。最初,我绘制JLable的交替背景“白色”或“灰色”,因为这些是JTable Swing组件交替绘制表的颜色。现在,当我选择一行时,与该行的其余部分一样,“图标”(第一列)的背景不会重绘为“深蓝色”。

这是我的问题:

一般
1)当突出显示一行时,如何也突出显示图标单元格(指针就足够了,不需要代码)?

具体

1.1)我必须使用JLabel吗?为什么我不能例如.SetValueAt("image.png",0,0)

1.2)我尝试了getColumnClass(...),但似乎重新绘制了给定列中的所有单元格。那是预期的吗?

谢谢。

参考方案

1.)javax.swing.table.TableCellRenderer在被调用时获得一个isSelected参数。您可以轻松地编写自己的TableCellRenderer,方法是继承JLabel(例如)并覆盖getTableCellRendererComponent:调整对象并返回this。拥有自己的渲染器还可以让您设置断点并真正了解正在发生的事情。

1.1 + 1.2。)setValueAtgetColumnClass都是模型的一部分,可能无法解决所选背景下的问题。

您不必使用JLabel:如果查看getTableCellRendererComponent的返回类型,您会注意到它是Component(甚至不是JComponent)。我猜JLabel只是习惯,因为它通常具有渲染器所需的所有功能,而DefaultTableCellRenderer也使用JLabel。为了获得最大的自由度,我建议您使用JComponent并编写自己的paintComponent,但是在这种情况下,您可能不必这样做。

Java Swing SearchBox模型 - java

我需要使用Java Swing的搜索框,如果单击任何建议,当输入字母时它将显示来自数据库的建议,它将执行一些操作。如果有可能在Java swing中,请提供源代码提前致谢 java大神给出的解决方案 您可以使用DefaultComboBoxModel,输出将是这样。Try this在此代码中,您将找到countries数组,因此您需要从数据库中获取此数组。

Swing-典型桌面应用程序中的并发 - java

这可能是一个广泛的问题,但我想知道单用户桌面应用程序通常在何处使用并发。您如何发现理想情况下(在设计阶段)并发问题?附注:从操作系统理论上来说,并发问题通常发生在无法共享资源(例如打印机)的情况下。不过,我仍然对在编程级别上可能发生的情况感到迷惑。 java大神给出的解决方案 Event Dispatch thread与其他逻辑之间的Swing中可能存在线程…

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

将新行添加到表时,将JTable行向下移动 - java

我必须维护用户在JTable中生成的事件列表。JTable由2列时间和事件以及5行组成。生成第一个事件时,其数据必须放置在JTable的第一行中;生成第二个事件时,必须将第一行中的数据移动到第二行中,并且第二个事件的数据必须放置在,依此类推,直到第5行。事件没有限制(可以生成n个事件)。但是我必须在JTabel中仅显示5个事件,而更早的事件将存储在文本文件中…