В моем проекте (с платформой Netbeans и JavaFX), который состоит из нескольких вкладок (все они созданы в подклассе класса TopComponent) Я пытаюсь реализовать еще одну вкладку, которая должна отображать экран виртуальной машины, уже работающей в VirtualBox.
Проблема в том, что инструмент, который я использую, состоит из Frame (из Java awt) в качестве контейнера верхнего уровня, и, естественно, если я попытаюсь добавить его в свой верхний компонент, я получаю исключение потому что невозможно включить контейнер верхнего уровня в другой контейнер верхнего уровня.
Итак, вот мой вопрос: возможно ли создать новый компонент с платформой NetBeans без использования класса TopComponent? Я уже пытался это сделать, но новая вкладка не появляется.
@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, это вызовет исключение. То же самое произойдет, если я попытаюсь добавить его прямо в контейнер. Какие-либо предложения?