Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing JTable自定义渲染_Java_Swing_Jtable_Render - Fatal编程技术网

Java Swing JTable自定义渲染

Java Swing JTable自定义渲染,java,swing,jtable,render,Java,Swing,Jtable,Render,我有一个没有JavaFx的编程任务,它是JavaSwing。我意识到我的知识仍然有限 我只有一个JTable。 但是,在这个JTable中,我需要一个自定义单元渲染器。 目标是使这种JTable: 我目前的解决办法是: 创建单个JTable: 获取每列并使用自定义渲染器设置其CellRenderer(如下所示) 创建一个实现TableCellRenderer的新类: 在GetTableCellRenderComponent内返回不同的JPanel 方法使用开关大小写(按列计数) 在数小时

我有一个没有JavaFx的编程任务,它是JavaSwing。我意识到我的知识仍然有限

我只有一个JTable。 但是,在这个JTable中,我需要一个自定义单元渲染器。 目标是使这种JTable:

我目前的解决办法是:

  • 创建单个JTable:
    • 获取每列并使用自定义渲染器设置其CellRenderer(如下所示)
  • 创建一个实现TableCellRenderer的新类:
    • 在GetTableCellRenderComponent内返回不同的JPanel 方法使用开关大小写(按列计数)
  • 在数小时之后,我认为我目前的解决方案是相当艰巨的任务。因此,我的问题是:

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

    您有两种选择

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


    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,我写了几行文字试图解释项目的基本概念,并帮助解决您的问题。请不要犹豫提问。希望这对您有所帮助。问候