2013-11-22 4 views
2

Как установить Piccolo2D холст внутри JavaFX?Как встроить холст Piccolo2D в JavaFX?

Я думал, что он должен работать через SwingNode, так как Piccolo имеет Swing управление под названием PCanvas.

Этот подход работает с Свинг:

public static void main(String[] args) { 

     PPath ellipse = PPath.createEllipse(100,100,400,200); 

     PCanvas canvas = new PCanvas(); 
     canvas.getLayer().addChild(ellipse); 


     JFrame frame = new JFrame(); 
     frame.setLayout(new BorderLayout()); 
     frame.add(canvas, BorderLayout.CENTER); 


     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(800, 600); 
     frame.setLocation(0, 0); 
     frame.setTitle("PCanvas_Try01"); 
     frame.setVisible(true); 
    } 

, но это не работает с JavaFX:

@Override 
    public void start(Stage stage) throws Exception { 

     PPath ellipse = PPath.createEllipse(100, 100, 400, 200); 

     PCanvas canvas = new PCanvas(); 
     canvas.getLayer().addChild(ellipse); 

     SwingNode swingNode = new SwingNode(); 
     swingNode.setContent(canvas); 

     Group group = new Group(); 
     group.getChildren().add(swingNode); 

     Scene scene = new Scene(group); 

     stage.setTitle("PCanvas_Try02"); 
     stage.setScene(scene); 
     stage.show(); 

    } 

ответ

0

Там могут быть некоторые проблемы с Group. Далее, кажется, работает:

import edu.umd.cs.piccolo.nodes.PPath; 
import edu.umd.cs.piccolo.PCanvas; 
import javafx.application.Application; 
import javafx.embed.swing.SwingNode; 
import javafx.scene.Scene; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class DemoPiccoloFx extends Application { 

    @Override 
    public void start(Stage stage) { 
     PPath ellipse = PPath.createEllipse(100, 100, 400, 200); 

     PCanvas canvas = new PCanvas(); 
     canvas.getLayer().addChild(ellipse); 

     SwingNode swingNode = new SwingNode(); 
     swingNode.setContent(canvas); 

     StackPane pane = new StackPane(); 
     pane.getChildren().add(swingNode); 
     stage.setScene(new Scene(pane, 500, 300)); 
     stage.setTitle("PCanvas_Try02"); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

enter image description here

+0

Почему вы используете PSwingCanvas? Это цель выглядит наоборот! –

+0

@SuzanCioc Да, правильно, нет необходимости в этом случае, он отлично работает с 'PCanvas'. Но если вы добавляете узлы «PSwing», тогда должен быть «PSwingCanvas». Я обновил ответ, чтобы удалить его. – tenorsax