1

我有以下代码:

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,但不适用于它的子类,例如JFrameor JPanel。怎么了?

4

3 回答 3

1

它告诉你 aJFrame不是 a JComponent。你猜怎么着?这是正确的。

亲自查看:JFrame API

于 2013-09-21T20:37:09.580 回答
0

JFrame不是JComponent子类,是Component子类,所以不能转换成JComponent

于 2013-09-21T20:36:34.607 回答
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)

所以......它应该可以将 JPanel 传递给 SwingNode::setContent

检查您的代码或以详细模式编译,看看错误是否是您认为的错误!

于 2013-11-02T01:18:35.383 回答