Swing JTable自定义渲染

时间:2012-01-19 08:34:24

标签: java swing jtable render

我有没有JavaFx的这种编程任务,而是Java Swing。我意识到我的知识仍然有限。

我有一个JTable。 但是,在这个JTable中,我需要一个客户Cell渲染器。 目标是制作这种JTable:Example image

我目前的解决方案是:Example Image

  1. 创建单个JTable:
    • 获取每个Column并使用自定义渲染器(下方)设置其CellRenderer。
  2. 创建一个新的类实现TableCellRenderer:
    • 在getTableCellRendererComponent中返回不同的JPanel 使用switch case的方法(作为列计数)。
  3. 经过数小时和数小时后,我认为我目前的解决方案是非常艰巨的任务。因此,我的问题是:

    创建此Custom JTable以实现上述主要目标的最简单方法是什么?

4 个答案:

答案 0 :(得分:3)

你有两个选择

1)JPanel嵌套了另一个JComponents并通过使用标准的LayoutManagers来解决这个问题,注意滚动不自然也不好

2)JTable with JPanel可以解决这个问题,请注意滚动内部JScrollPane inside another JScrollPane

答案 1 :(得分:2)

按照@mKorbel的建议为一行创建嵌套面板后,您可以将任意数量的面板添加到GridLayout(0, 1)中的JScrollPane。如果渲染多行成为问题,您可以采用JTable使用的相同方法,如here所示。

答案 2 :(得分:2)

我一直面对这个问题,我决定自己做。扩展表的现有实现,为表中的内容添加一些概念,并为此编写一些编辑器/侦听器。一切都一样,但有一个treetable。

我正在开展名为SUMI的项目。

它包含一个java包( ar.com.tellapic.sumi.treetable ),它是来自JXTreeTableSwingLabs的扩展名。

该项目正在开发中,我还没有提供任何文件。您可以通过创建渲染器并根据需要创建编辑器来执行所需操作,以便最后将操作附加到每个对象。

如果您决定使用它并需要帮助,请给我发电子邮件,我会毫无问题地为您提供帮助。

或者,您可以自己阅读来源。

此致

已编辑(再次):

为了清楚这个答案,我刚刚在project wiki中创建了一个wiki页面并将相关代码放在那里。如果有人认为应该在此插入代码,请告诉我。

基本上,我尝试通过使用我的项目的一部分来解释如何使用JTable找到您可能会发现的渲染器/编辑器问题的直接解决方案,以获得类似的结果:< / p>

请注意,屏幕截图是在点击相应的勾选按钮后拍摄的。

答案 3 :(得分:0)

即使JTable可以通过单元格渲染器和单元格编辑器自定义,但它绝不是首选,因为您必须为此进行大量混乱编码。相反,对于您的问题,我建议使用JScrollPane并将您的组件(视图面板作为您的示例jTable)添加到其viewPort。

对于此实现,使用扩展JPanel的自定义类表示每一行。并在其中添加所需的行组件(可能是jlabel,jtextfields甚至jpanel等任何组件)。为简单起见,您可以对行面板使用null布局,并在所需的任何位置添加组件。

我希望这可以帮助您解决问题。如果您在此实施中遇到任何问题,请随时再问。