为什么instanceof不能与JPanel和JComponent一起使用?

时间:2011-05-05 21:51:00

标签: java swing

我觉得我在这里错过了一些令人眼花缭乱的东西,这对于Java大师来说是如此低沉的成果:

我的代码如下:

private static void myFunc(JComponent c) {
        if (c instanceof JPanel) {
            //stuff
        }
        else if (c instanceof JMenu) {
            // other stuff
        }
}

即使JPanel和JMenu都是JComponent的子类,第一个instanceof也会出错:

Incompatible conditional operand types JComponent and JPanel

虽然第二个工作正常。为什么它认为我的JComponent永远不会是JPanel

4 个答案:

答案 0 :(得分:6)

我怀疑你是从某个地方导入另一个JPanel。对于分钟,请尝试使用完全限定类型:

private static void myFunc(javax.swing.JComponent c) {
    if (c instanceof javax.swing.JPanel) {
        //stuff
    }
}

除此之外,我无法想到它不会编译的任何理由......如果你能提出一个简短而完整的程序来证明这个问题,那会有所帮助。编译好了:

import javax.swing.JComponent;
import javax.swing.JPanel;

public class Test {

    public static void myFunc(JComponent c) {
        if (c instanceof JPanel) {
            System.out.println("yes");
        }
    }
}

答案 1 :(得分:1)

我会仔细检查进口货物。

您确定已导入了所需的JPanelJComponent课程吗? 它们是以下吗?

 import javax.swing.JPanel;
 import javax.swing.JComponent;

答案 2 :(得分:1)

使用此:

if(javax.swing.JPanel.isInstance(c)){

答案 3 :(得分:1)

以下代码编译良好:

import javax.swing.*;

class Panel
{
  private static void myFunc(JComponent c) {
    if (c instanceof JPanel) {
      //stuff
    } else if (c instanceof JMenu) {
      // other stuff
    }
  }
}