Java Swing JTable自定义渲染
我有一个没有JavaFx的编程任务,它是JavaSwing。我意识到我的知识仍然有限 我只有一个JTable。 但是,在这个JTable中,我需要一个自定义单元渲染器。 目标是使这种JTable: 我目前的解决办法是:Java Swing JTable自定义渲染,java,swing,jtable,render,Java,Swing,Jtable,Render,我有一个没有JavaFx的编程任务,它是JavaSwing。我意识到我的知识仍然有限 我只有一个JTable。 但是,在这个JTable中,我需要一个自定义单元渲染器。 目标是使这种JTable: 我目前的解决办法是: 创建单个JTable: 获取每列并使用自定义渲染器设置其CellRenderer(如下所示) 创建一个实现TableCellRenderer的新类: 在GetTableCellRenderComponent内返回不同的JPanel 方法使用开关大小写(按列计数) 在数小时
- 获取每列并使用自定义渲染器设置其CellRenderer(如下所示)
- 在GetTableCellRenderComponent内返回不同的JPanel 方法使用开关大小写(按列计数)
2) 要解决这个问题,请注意滚动内部尽管JTable可以通过单元格渲染器和单元格编辑器定制为您想要的任何内容,但它从来都不是首选,因为您必须为此进行大量混乱的编码。相反,对于您的问题,我建议使用JScrollPane并将组件(视图面板作为示例jTable)添加到其视口中 对于这个实现,用扩展JPanel的自定义类表示每一行。并在其中添加所需的行组件(可能是任何组件,如jlabel、jtextfields甚至jpanel)。为了简单起见,您可以对行面板使用null布局,并在您想要的任何位置添加组件
我希望这能帮助你解决问题。如果您在这个实现中遇到任何问题,请随时再次询问 一旦按照@mKorbel的建议为一行创建了嵌套面板,就可以将任意数量的面板添加到
JScrollPane
中的GridLayout(0,1)
。如果渲染多行成为一个问题,您可以采用与JTable
相同的方法,如图所示。我已经面临这个问题一段时间了,我决定自己做。扩展表的现有实现,为我期望的表添加一些概念,并为此编写一些编辑器/侦听器。都一样,但是有一个树梢
我正在做一个叫“我的朋友”的项目
它包含一个java包(ar.com.tellapic.sumi.treetable),它是from的扩展
该项目正在开发中,我还没有提供任何文档。您可以通过创建渲染器和编辑器(如果需要)来执行所需操作,以便最后将动作附加到每个对象
如果你决定使用它,你需要帮助,给我发电子邮件,我会毫无问题地帮助你
或者,你也可以自己阅读资料来源
问候,
编辑(再次):
为了澄清一点这个答案,我刚刚在中创建了一个wiki页面,并将相关代码放在那里。如果有人认为应该在这里插入代码,请让我知道
基本上,我试图解释如何通过使用我的项目的一部分,根据您的具体需求,使用JTable
找到渲染器/编辑器问题的直接解决方案,以便获得如下结果:
请注意,屏幕截图是在单击相应的勾选按钮后拍摄的。如果问题是:没有自定义渲染器是否可能?答案是否定的。这是一项多么艰巨的任务?@JBNizet,艰巨的任务是我应该创建每个不同的JPanel,其中包含不同的组件,而不需要短代码。。。是的,我意识到我当然应该定制JTable。行/列跨越通常不受支持-所以是的,这是令人畏惧的:-)增加基础表的粒度,然后(通过适当的渲染器/编辑器)拆分是在完全受控的上下文中要做的事。每个(tableModel)单元有更复杂的数据,渲染器必须将这些数据拆分为每个渲染器区域的数据。对于嵌套面板,额外的价格为+1;可以看到一个相关的例子。我同意你的第一段,但我不能赞同使用
null
布局。A似乎合理,-1对于空布局(手动执行布局管理器的工作没有什么“简单”)嘿,谢谢你的回答,@Sebastian。。。。我想你也从JTable中发现了类似的概念,我们都在这里使用2get。。。不管怎样,你有没有试着把按钮放在滴答声图像上?我已按按钮将其放在那里,但交互似乎失败了(@gumuruh,我需要记录整个过程。基本上,对于您提到的“勾选按钮”,您需要创建“模型”(一个自定义TellapicNodeAction
),并对视图进行一些重写(DualImageRenderer类).TellapicNodeAction
可以引用一个AbstractAction
。您可以扩展DefaultAbstractTellapicNodeAction
类来创建自定义操作,并将AbstractAction
传递给构造函数(超类将处理performAction()
以执行操作。actionPerformed()
为您准备)。请给我一些时间,今天下午我将尝试记录更多。您好。@gumuruh,我花了太多字符才提到您还需要处理/使用/创建正确的编辑器。在创建自定义TellapicNodeAction
扩展DefaultAbstractTellapicNodeAction
时,将编辑和渲染键。正如我前面提到的,请给文档时间。@gumuruh,我写了几行文字试图解释项目的基本概念,并帮助解决您的问题。请不要犹豫提问。希望这对您有所帮助。问候