Hello all,
i'm currently working on a project, that uses a JavaFX TreeView. The TreeView must appear in a popup-window (that is showing if you e.g. click on a Jcombobox).
To create the popup-window i use JidePopupMenu. In the example code below, if you click on the text, the popup appears, showing the Tree.
The problem is, i can open the popup only once. For the second time, it doesn't work.
I open the popup in mouseReleased(). The Tree is initialised in createTextScene().
The TreeView example comes from here:
http://www.javaworld.com/article/207449 ... d-swt.htmlhttp://java-buddy.blogspot.co.at/2012/0 ... ample.htmlCan you help me, to get the popup working?
Finally it would be nice, if i could open the popup by clicking on a JideComboBox.
Is it possible to assign the TreeView with a JideComboBox? (I mean, if someone clicks on the arrow at the right, then the TreeView apperas instead of the contents of the JideComboBox).
Thank you,
Daniel
package javaprinter;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.StackPane;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import com.jidesoft.swing.JidePopupMenu;
public class Javafx
{
static JFXPanel fxPanel = new JFXPanel();
static JidePopupMenu menu = new JidePopupMenu();
private static void initAndShowGUI()
{
// This method is invoked on Swing thread
final JFrame frame = new JFrame("JavaFX / Swing Integrated");
frame.pack();
frame.setSize(150, 100);
frame.setVisible(true);
Platform.runLater(new Runnable()
{
@Override
public void run()
{
initFX(frame);
}
});
}
private static void initFX(JFrame frame)
{
// This method is invoked on JavaFX thread
// Create the TreeView
final Scene scene = createTextScene();
Javafx.fxPanel.setScene(scene);
// add the TreeView to the popup-window
Javafx.menu.add(Javafx.fxPanel);
// create a panel, that will contain a label
JPanel panel = new JPanel();
/* add a label to the panel */
JLabel label = new JLabel("Right click to get a popup");
panel.add(label);
panel.setSize(120, 100);
/* add a mouse listener to handle the right click */
/* a popup-window appears, that shows a JavaFX-TreeView
* with some element. */
frame.addMouseListener(new MouseAdapter(){
@Override
public void mouseReleased(MouseEvent e)
{
if (e.isPopupTrigger()) {
menu.show(e.getComponent(), e.getX(), e.getY());
System.out.println("\nOpening popup-window.\n");
}
}
});
frame.add(panel, BorderLayout.CENTER);
frame.pack();
frame.setSize(150, 100);
System.out.println("\ninit done\n");
}
/**
* Create the content of the TreeView.
* @return a Scene-instance containing the TreeView.
*/
private static Scene createTextScene() {
TreeItem<String> treeItemRoot = new TreeItem<> ("Root");
TreeItem<String> nodeItemA = new TreeItem<>("Item A");
TreeItem<String> nodeItemB = new TreeItem<>("Item B");
TreeItem<String> nodeItemC = new TreeItem<>("Item C");
treeItemRoot.getChildren().addAll(nodeItemA, nodeItemB, nodeItemC);
TreeItem<String> nodeItemA1 = new TreeItem<>("Item A1");
TreeItem<String> nodeItemA2 = new TreeItem<>("Item A2");
TreeItem<String> nodeItemA3 = new TreeItem<>("Item A3");
nodeItemA.getChildren().addAll(nodeItemA1, nodeItemA2, nodeItemA3);
TreeView<String> treeView = new TreeView<>(treeItemRoot);
StackPane root = new StackPane();
root.getChildren().add(treeView);
Scene scene = new Scene(root, 300, 250);
return scene;
}
public static void main(String[] arguments)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
initAndShowGUI();
}
});
}
}