2013-09-21 3 views
1

나는 다음과 같은 코드가 있습니다JavaFX : JComponent 매개 변수가있는 SwingNode의 setContent 메소드가 JPanel을 허용하지 않는 이유는 무엇입니까?

private void launchSingleRecordWindow() { 
    SwingNode swingNode = new SwingNode(); 
    MainStageController.setContent(new AnchorPane(swingNode)); 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      JPanel webcamPanel = new WebcamPanel(selectedWebcam); 
      swingNode.setContent(webcamPanel); 
     } 
    }); 
} 

을하지만 놀랍게도 문자열 swingNode.setContent(webcamPanel);이 올바르지 않습니다.

하게 IntelliJ IDEA는 말한다 :

java: incompatible types: javax.swing.JPanel cannot be converted to javax.swing.JComponent.

나는 별도의 클래스를 만들려고했지만, 그것은 JComponent의 서브 클래스는 아니지만 그 서브 클래스를위한 경우에만 그러한 JFrame 또는 JPanel로 작동합니다. 뭐가 잘못 되었 니?

+0

그래서 'SwingNode'는 무엇입니까? 그리고'setContent (...) '에 대한 EXACT 서명은 무엇입니까? – splungebob

+0

@splungebob'SwingNode'는 JavaFX8의 클래스입니다. 여기를보십시오 : [link] (http://download.java.net/jdk8/jfxdocs/index.html?javafx/embed/swing/SwingNode.html) – Eugene

+0

좋습니다, 감사합니다. 내가 처음 대답했을 때 javafx 태그를 놓쳤을 것입니다. – splungebob

답변

0

JFrame IT는 Component 하위 클래스, 그래서 JFrameJComponent하지 있음을 말하고 JComponent

1

로 변환 할 수 없습니다하는 JComponent 서브 클래스가 아닙니다. 맞춰봐? 맞습니다.

는 자신에 대한 참조 : JFrame API

+0

예, 맞습니다. 내 실수예요 ...하지만 JPanel을 사용했습니다. 결과는 같습니다. – Eugene

+1

그럼 당신이 말하지 않는 이야기가 더 있습니다. 'JComponent'를 파라미터로서 사용하는 임의의 메소드 서명도,'JPanel' 또는 JPanel의 서브 클래스를 받아들입니다. 항상. – splungebob

+0

@Eugene 코드에 이상이있을 것입니다. 그것은 저에게 효과적입니다. – BackSlash

0

오류가 이상하다 :

java: incompatible types: javax.swing.JPanel cannot be converted to javax.swing.JComponent 

JPanel과는 JComponent에 있기 때문에 ... :

Class JPanel 
java.lang.Object 
    java.awt.Component 
     java.awt.Container 
     javax.swing.JComponent 
      javax.swing.JPanel 

그리고 SwingNode이 JComponent의를 수락하지 :

public void setContent(javax.swing.JComponent content) 

그래서 ... SwingNode :: setContent에 JPanel을 전달해야합니다.

코드를 검사하거나 자세한 모드로 컴파일하고 오류가 있다고 생각하는지 확인하십시오!