JFrame无法找到'pack'方法

时间:2011-11-03 23:34:55

标签: java swing user-interface jframe

我正在开始Java类,并且赋值要求我编写一个类来表示JPanel,其中按钮用于递增和递减值,而标签用于显示值。然后,我必须创建一个单独的类来实例化面板并将其添加到框架中。我试图通过运行pack方法调整框架大小以适应面板的大小。我尝试使用:

调用frame的pack方法
SwingUtilities.getAncestorOfClass(JFrame.class, this).pack()

我收到“找不到符号 - 方法包()”错误。 getAncestorOfClass肯定会返回一个JFrame,它是正确的JFrame。当我从创建JFrame的驱动程序类内部运行pack方法时,没有问题。任何想法为什么它找不到包方法?是因为我试图从一个单独的类文件中运行它吗?我也无法访问其他一些JFrame方法,例如getContentPane,但我能够访问其他一些如add。咦?

3 个答案:

答案 0 :(得分:5)

方法SwingUtilities.getAncestorOfClass返回Container。现在,你知道Container实际上是一个JFrame,但编译器却没有。 Java是一种静态语言,而不是一种动态的语言,它只是试图调用该方法,无论该类是否声明它。

由于Container没有pack方法,编译器会抱怨。您需要强制转换为JFrame才能使其正常工作:

((JFrame)SwingUtilities.getAncestorOfClass(JFrame.class, this)).pack();

小心,但是......如果找不到合适的祖先,该方法可以返回null。您可能想先检查一下。

答案 1 :(得分:3)

您需要将其强制转换为JFrame:

((JFrame) SwingUtilities.getAncestorOfClass(JFrame.class, this)).pack();

答案 2 :(得分:1)

SwingUtilities.getAncestorOfClass(Class, Component)方法返回一个组件,而不是JFrame。