Bit*_*ber 1 java user-interface swing jframe
我正在开始Java类,并且赋值要求我编写一个类来表示JPanel,其中按钮用于递增和递减值,而标签用于显示值.然后,我必须创建一个单独的类来实例化面板并将其添加到框架中.我试图通过运行pack方法调整框架大小以适应面板的大小.我尝试使用以下方法调用框架的包方法:
SwingUtilities.getAncestorOfClass(JFrame.class, this).pack()
Run Code Online (Sandbox Code Playgroud)
我得到一个"找不到符号 - 方法包()"错误.getAncestorOfClass肯定会返回一个JFrame,它是正确的JFrame.当我从创建JFrame的驱动程序类内部运行pack方法时,没有问题.任何想法为什么它找不到包方法?是因为我试图从一个单独的类文件中运行它吗?我也无法访问其他一些JFrame的方法,如的getContentPane,但我是能够访问其他一些如加.咦?
该方法SwingUtilities.getAncestorOfClass返回一个Container.现在,你知道这Container真的是一个JFrame,但编译器却没有.Java是一种静态语言,而不是一种动态的语言,它只会尝试调用该方法,无论该类是否声明它.
由于Container没有pack方法,编译器会抱怨.您需要强制转换为JFrame才能使其正常工作:
((JFrame)SwingUtilities.getAncestorOfClass(JFrame.class, this)).pack();
Run Code Online (Sandbox Code Playgroud)
但是要小心......如果找不到合适的祖先,该方法可以返回null.您可能想先检查一下.