【问题标题】:How can I use my TopComponent as a JFrame?如何将我的 TopComponent 用作 JFrame?
【发布时间】:2014-07-22 06:44:09
【问题描述】:

Netbeans 平台的 TopComponents 在功能上与 JFrames 在许多方面相似,并且打算这样使用,除了 TopComponent 扩展 JComponent 的事实。

但是,我目前正在尝试将Docking Frames 用于我的应用程序。我想在我的一个 TopComponents 中插入一堆这些,但是控件类需要一个 JFrame 作为参数,没有它就无法实例化。正如我所说,TopComponent 不会扩展 JFrame,所以我不能简单地转换它们,但遗憾的是,如果可以的话,它们可能会成功。

我能做什么?

【问题讨论】:

  • 有点明显,但为什么不能只使用 JFrames 而不是 TopComponents?
  • @CanadianDavid 我希望可以,但有人决定我们必须遵守 Netbeans 平台的规则。设计决策。因此,顾名思义,我们使用 TopComponents 作为顶级容器而不是 JFrame。还有其他方法吗?这是问题的一部分。
  • 一个org.openide.windows.TopComponent“可以停靠或取消停靠。”为什么需要对接框架?
  • @trashgod 我需要在停靠的 TopComponents 中停靠面板。 AFAIK 我们不能嵌套 TopComponents(因此得名),所以我需要另一个工具(而且对接框架看起来很完美)。它可能看起来令人困惑,但这正是用户想要的。

标签: java swing netbeans rcp netbeans-platform


【解决方案1】:

尝试改用嵌套的JPanel

  1. 单击“设计”并单击鼠标右键并将布局从“免费”更改为GridBagLayout
  2. 添加内部JPanel。我使用GridBagConstraints,因为它只是确保“全帧”布局的一种方法。您或许可以使用任何其他布局来做同样的事情。

我尽量保持TopComponent 尽可能小。所有 GUI 组件都在嵌套的 JPanels 中。如果您想在没有 NetBeans 平台的情况下测试您的代码,您只需添加父 JFrame 而不是 TopComponent

public MyTopComponent() {
   initComponents();
   panel = new MyPanel();
   //ensures that our panel will be using 100% of our TopComponent
   add(panel, new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
       GridBagConstraints.NORTHWEST, 
       GridBagConstraints.BOTH,
       new Insets(0, 0, 0, 0), 0, 0)
   );
}

//this code is generated by GUI editor
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {   
    setLayout(new java.awt.GridBagLayout());
}// </editor-fold>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    相关资源
    最近更新 更多