我正在开始Java类,并且赋值要求我编写一个类来表示JPanel,其中按钮用于递增和递减值,而标签用于显示值。然后,我必须创建一个单独的类来实例化面板并将其添加到框架中。我试图通过运行pack方法调整框架大小以适应面板的大小。我尝试使用:
调用frame的pack方法SwingUtilities.getAncestorOfClass(JFrame.class, this).pack()
我收到“找不到符号 - 方法包()”错误。 getAncestorOfClass肯定会返回一个JFrame,它是正确的JFrame。当我从创建JFrame的驱动程序类内部运行pack方法时,没有问题。任何想法为什么它找不到包方法?是因为我试图从一个单独的类文件中运行它吗?我也无法访问其他一些JFrame方法,例如getContentPane,但我我能够访问其他一些如add。咦?
答案 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。