在我的项目中(使用 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中添加框架,则会引发异常。如果我尝试直接在容器内添加它,也会发生同样的情况。有什么建议吗?
答案 0 :(得分:0)
根据定义,框架是顶级窗口组件。框架不能放在另一个组件内,其他组件放在框架内。
如果该工具仅提供Frame,则它必然是其自己的窗口。你唯一可以做的就是设置它的位置,尺寸,显示和隐藏它,设置标题,其他框架内容。