如何在 Java 中添加组件并将其置于 JFrame 的前面?

Posted

技术标签:

【中文标题】如何在 Java 中添加组件并将其置于 JFrame 的前面?【英文标题】:How To Add A Component And Bring It To Front On A JFrame In Java? 【发布时间】:2017-05-17 15:45:07 【问题描述】:

我正在创建一个 Java 类,它的构造函数将从其参数中获取一个 JForm,然后以编程方式在该表单上添加一个 JTable,如下面的代码所示...

public class DEMOCLASS

private JTable myJTable = new JTable();
public DEMOCLASS(JFrame incomingForm)
      
        incomingForm.add(myJTable);
        myJTable.setSize(coloumWidth,rowHeight);
        myJTable.setLocation(xpos, ypos);
        myJTable.setVisible(true);  
        //incomingForm.setComponentZOrder(myJTable,0);    // Its Bringing The Component To From But Spreading It All Over The Form From Top To Bottom And Left To Right Fully :(      
    

现在的主要问题是,在调用这个类的地方,已经有许多其他编码添加的组件,我想把myJTable 组件放在前面,现在隐藏在它们后面。总之,我无法控制其他已经添加的组件。我也听说过MyGlassPaneJLayeredPane,但在这里无法让它们与我的概念相匹配。

所以我的主要问题是如何将这个myJTable 放在incomingForm 上所有先前添加的组件的前面?

【问题讨论】:

不清楚您到底想要实现什么,也不清楚您使用 JLayeredPane 尝试了什么,这听起来像是解决此问题的可行方案 我再次更新了我的问题。我的简单问题是将我添加的组件放在之前添加的所有组件的前面... 你已经包含了这个问题:“所以我的主要问题是如何将这个 myJTable 放在所有先前添加的组件的前面incomingForm?”和这个答案:“它把组件从上到下,从左到右完全传播到整个表单中:(”所以仍然不清楚你想要什么,而不是这个 @ControlAltDel 此代码incomingForm.setComponentZOrder(myJTable,0); 将我的组件置于所有其他组件之上,但它使我的表格大小在整个表单中填满意味着忽略myJTable.setSize(coloumWidth,rowHeight);myJTable.setLocation(xpos, ypos); 代码逻辑。那么以其他方式做什么呢? So what to do in alternative way? - 给了你两个建议。 【参考方案1】:

Swing默认的绘制逻辑是先绘制最后添加到面板的组件。

您可以通过使用 ZOrder 来更改此设置,就像您尝试使用已注释掉的代码一样。

但是,Swing 并不是真正设计为将组件绘制在彼此之上。组件通常位于 2D 区域,而不是 3D 区域。您这样做的原因尚不清楚。

我建议你可以:

    使用子JDialog 来显示表格及其数据(您可以使对话框不装饰以移除边框)。 也许使用GlassPane 来显示表格。

【讨论】:

你得到了我的愿望。我想在所有其他组件(如对话框)的顶部显示一个数据表。我将表格添加几秒钟,然后通过使用myJTable.setVisible(false); 以编程方式隐藏,这就是为什么我在其他组件上覆盖它.... 在您的JDialog 提示中,我找到了***.com/a/8410677/3170029 并且还出现了adding a window to a container 的错误,这可能吗? @SaharJabeen,这两种解决方案都不是将表格添加到框架中,您不应该这样做。两种解决方案都显示了如何在框架顶部显示表格。 JDialog 与您创建对话框、向其中添加组件并使其可见的框架完全一样。 GlassPane 是框架的一部分。阅读教程,了解如何使用它的示例。 非常感谢。最后我可以通过使用JDialog 和一些调整来做到这一点。如果你愿意,我也会在你的答案中分享它以帮助其他人......

以上是关于如何在 Java 中添加组件并将其置于 JFrame 的前面?的主要内容,如果未能解决你的问题,请参考以下文章

将 UIView 作为子视图添加到 UIButton 并将其置于前面无法正常工作

如何在“vagrant up”上传递参数并将其置于 Vagrantfile 的范围内?

React GraphQL Apollo 和 Redux。如何查询数据并将其置于 store 的 initialState 中?

如何找到活动的 PyQt 窗口并将其置于最前面

如何使用 Cocoa api 启动应用程序并将其置于最前面?

如何创建自定义组件并将其添加到基于对话框的应用程序 (MFC)?