Ich habe ein Problem, das vielleicht durch einen Mangel an Verständnis in einigen Prinzipien, ob die Netbeans Platform (7.1.2) oder JavaFX verursacht wird 2. Ich JPanel
ein JFXPanel
mit einem sehr einfachen Scene
zu einem Schwingen hinzufügen wollte, dass ist ein Kind einer TopComponent. Ich erreichte dies durch den folgenden Code:Warum verschwindet der JavaFX-Inhalt auf meiner TopComponent?
public accexTopComponent() {
initComponents();
setName(Bundle.CTL_accexTopComponent());
setToolTipText(Bundle.HINT_accexTopComponent());
putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);
//Begin of my code
myFX = new JFXPanel(); //myFX is a static JFXPanel
Platform.runLater(new Runnable() {
@Override
public void run() {
myFX.setScene(new Scene(ButtonBuilder.create().minHeight(40.0).minWidth(40.0).build()));
}
});
jPanel1.add(myFX);
}
Dies kompiliert, ohne ein Problem und ein JavaFX Button
angezeigt wird, wenn ich die TopComponent
zum ersten Mal zeigen. Sobald die Komponente jedoch ausgeblendet und wieder angezeigt wird, verschwindet JavaFX Button
, während die anderen untergeordneten Elemente noch sichtbar sind.
Warum verschwinden die JavaFX-Inhalte?
Edit:
ich nun auch die Quelle des ganzen TopComponent. Ich schätze, das ist alles, was du brauchst, um es selbst zu testen. Ich habe keine andere Datei geändert.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.jeed.nbgan.accexplorer;
import java.awt.Color;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.control.ButtonBuilder;
import javafx.scene.text.TextBuilder;
import javafx.scene.web.WebView;
import javafx.scene.web.WebViewBuilder;
import org.netbeans.api.settings.ConvertAsProperties;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.windows.TopComponent;
import org.openide.util.NbBundle.Messages;
/**
* Top component which displays something.
*/
@ConvertAsProperties(dtd = "-//de.jeed.nbgan.accexplorer//accex//EN",
autostore = false)
@TopComponent.Description(preferredID = "accexTopComponent",
//iconBase="SET/PATH/TO/ICON/HERE",
persistenceType = TopComponent.PERSISTENCE_ALWAYS)
@TopComponent.Registration(mode = "explorer", openAtStartup = true)
@ActionID(category = "Window", id = "de.jeed.nbgan.accexplorer.accexTopComponent")
@ActionReference(path = "Menu/Window" /*
* , position = 333
*/)
@TopComponent.OpenActionRegistration(displayName = "#CTL_accexAction",
preferredID = "accexTopComponent")
@Messages({
"CTL_accexAction=accex",
"CTL_accexTopComponent=Konten-Explorer",
"HINT_accexTopComponent=Durchsuchen von Abteilungen und Konten"
})
public final class accexTopComponent extends TopComponent {
static JFXPanel myFX;
public accexTopComponent() {
initComponents();
setName(Bundle.CTL_accexTopComponent());
setToolTipText(Bundle.HINT_accexTopComponent());
putClientProperty(TopComponent.PROP_CLOSING_DISABLED, Boolean.TRUE);
myFX = new JFXPanel();
Platform.runLater(new Runnable() {
@Override
public void run() {
myFX.setScene(new Scene(ButtonBuilder.create().minHeight(40.0).minWidth(40.0).build()));
}
});
jPanel1.add(myFX);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
jPanel1.setLayout(new java.awt.GridBagLayout());
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(54, 54, 54)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 193, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(153, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(33, 33, 33)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 193, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(74, Short.MAX_VALUE))
);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
// End of variables declaration
@Override
public void componentOpened() {
// TODO add custom code on component opening
}
@Override
public void componentClosed() {
// TODO add custom code on component closing
}
void writeProperties(java.util.Properties p) {
// better to version settings since initial version as advocated at
// http://wiki.apidesign.org/wiki/PropertyFiles
p.setProperty("version", "1.0");
// TODO store your settings
}
void readProperties(java.util.Properties p) {
String version = p.getProperty("version");
// TODO read your settings according to their version
}
}
In meinem Fall ist dies TopComponent
Teil einer Komponente AccountExplorer genannt, die JavaFX verweist und wird von einem einfachen NB Plattform Anwendungs verwiesen.
Ich habe versucht, das Problem mit Netbeans 7.1 und JavaFX 2.1 zu reproduzieren. Alle Komponenten erscheinen wieder wie erwartet. Bitte geben Sie einen SSCCE ein. – pmoule
Danke für die Mühe. Sehen Sie mein Projekt [hier] (https://rapidshare.com/files/894496305/FinancialEngineer.7z) – dajood
Sorry, keine Projekt-Download-Links, bitte. Um andere einzubinden und sie attraktiver zu machen, schreiben Sie eine [SSCCE] (http://pscode.org/sscce.html). – pmoule