2015-02-01 2 views
-1

그래서 java에서 처리중인 처리 코드가 있습니다. 하지만 이제는 GUI 용 JavaFX에 임베드하려고합니다. 그렇게하려면 어떻게해야합니까? 다음 코드를 사용해 보았지만 작동하지 않는 것 같습니다.javafx에 PApplet을 포함시키는 방법은 무엇입니까?

package testprocessing; 
import javafx.application.Application; 
import javafx.embed.swing.SwingNode; 
import javafx.scene.*; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

import javax.swing.JApplet; 
import javax.swing.SwingUtilities; 
import java.awt.Dimension; 

import java.util.concurrent.*; 
import processing.core.*; 

public class JavaFxApplet extends Application { 
    private PApplet applet = new MyProcessingSketch(); 
    private Dimension appletSize; 

    @Override public void init() throws ExecutionException, InterruptedException { 
     applet.init(); 

     FutureTask<Dimension> sizingTask = new FutureTask<>(() -> 
      applet.getRootPane().getPreferredSize() 
     ); 
     SwingUtilities.invokeLater(sizingTask); 
     appletSize = sizingTask.get(); 
    } 

    @Override public void start(Stage stage) { 
     final SwingNode swingNode = new SwingNode(); 
     SwingUtilities.invokeLater(() -> 
      swingNode.setContent(applet.getRootPane()) 
     ); 

     stage.setScene(
      new Scene(
       new Group(swingNode), 
       appletSize.getWidth(), appletSize.getHeight(), 
       Color.BLACK 
      ) 
     ); 
     stage.show(); 
    } 

    @Override public void stop() { 
     applet.stop(); 
     applet.destroy(); 
    } 

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

getRootPane()에서 오류가 발생합니다. 그 대안을 제안 해 주시겠습니까?

+0

"오류 발생"은 아무 의미도 없습니다. Java는 오류의 원인을 알려주는 데 아주 능숙합니다. 그래서 오류의 원인은 무엇입니까? 컴파일러는 뭐라고 말합니까? 어떤 스택 추적이 인쇄됩니까? 무슨 일이 일어날까요? 정보를 주다. – Kon

답변

0

왜 애플릿의 루트 창을 가져 오려고합니까? 애플릿을 JPanel에 추가 한 다음 SwingNode에 JPanel을 추가하면됩니다.

JPanel panel = new JPanel(); 
panel.add(applet); 
swingNode.setContent(panel) 
+0

swingNode.setContent (애플릿)이 호환되지 않는 유형을 제공합니다. PAapley를 JComponent로 변환 할 수 없습니다. – sj66

+0

* PApplet을 JComponent로 변환 할 수 없습니다. – sj66

+0

@ sj66 내 대답을 편집했습니다. –

관련 문제