Netbeans平台:如何使用Frame而不是TopComponent?

时间:2016-08-05 06:26:18

标签: java swing javafx awt netbeans-platform

在我的项目中(使用 Netbeans平台 JavaFX ),它由多个选项卡组成(所有选项卡都创建为 TopComponent类的子类)我正在尝试实现另一个选项卡,该选项卡应显示已在VirtualBox上运行的虚拟机的屏幕。

问题是我使用的工具是由 Frame (来自Java awt)组成的顶级容器,当然,如果我尝试将其添加到我的顶级组件中我得到一个例外,因为无法在另一个顶级容器中包含顶级容器。

所以,这是我的问题:是否可以在不使用TopComponent类的情况下使用NetBeans平台创建新组件?我已经尝试过这样做,但新选项卡没有出现。

@TopComponent.Description(preferredID = "MyTopComponent",
 // iconBase="SET/PATH/TO/ICON/HERE",
 persistenceType = TopComponent.PERSISTENCE_ALWAYS)
@TopComponent.Registration(mode = "editor", openAtStartup = true)
@ActionReference(path = "Menu/Window" /* , position = 333 */ )
@TopComponent.OpenActionRegistration(displayName = "#CTL_MyAction", preferredID = "MyTopComponent")
public class MyTopComponent extends TopComponent {

 /**
  * Logging Facility Instance
  */
 private static final Logger LOG = LoggerFactory.getLogger(MyTopComponent.class);

 private JFXPanel fxPanel;

 private RDPClient rdpClient;

 private Frame rdpFrame;

 public MyTopComponent() {
  initTopComponent();
  initFXComponent();
  setClientProperties();
 }

 @Override
 public void componentClosed() {
  // TODO add custom code on component closing
 }


 private void initTopComponent() {
  setName(Bundle.CTL_MyTopComponent());
  setToolTipText(Bundle.HINT_MyTopComponent());
 }

 private void setClientProperties() {
  putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);
  putClientProperty(TopComponent.PROP_DRAGGING_DISABLED, Boolean.TRUE);
  putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE);
  putClientProperty(TopComponent.PROP_UNDOCKING_DISABLED, Boolean.TRUE);
 }

 private void initFXComponent() {

  try {
   rdpClient = new RDPClient();
  } catch (RdesktopException ex) {
   Exceptions.printStackTrace(ex);
  }

  setLayout(new BorderLayout());
  fxPanel = new JFXPanel();
  rdpFrame = rdpClient.getComponent();
  // fxPanel.add(rdpClient.getComponent());
  add(fxPanel, BorderLayout.CENTER);

  Platform.setImplicitExit(false);
 }

如果我尝试在JFXPanel中添加框架,则会引发异常。如果我尝试直接在容器内添加它,也会发生同样的情况。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

根据定义,框架是顶级窗口组件。框架不能放在另一个组件内,其他组件放在框架内。

如果该工具仅提供Frame,则它必然是其自己的窗口。你唯一可以做的就是设置它的位置,尺寸,显示和隐藏它,设置标题,其他框架内容。