使JFrame静态编程是不是很糟糕?我之前将JFrame声明为静态变量的原因是因为我在其中实例化了JPanel,我需要在某些事件上向JFrame发送信息,我唯一能做的就是在我的静态声明JFrame main然后在JFrame中调用一个方法来调用我的JPanel中的方法。
答案 0 :(得分:4)
使用静态本质上不是好的或坏的,只要你出于正当的理由使用它。
然而,听起来你出于错误的原因使用static关键字,使得在类之间传递信息变得“更容易”。这种方法的问题在于,它将在未来扩展您的程序变得更加困难:如果您想要包含静态变量的类的两个实例,会发生什么?您将不得不重写一堆代码,因此最好避免使用静态作为共享数据的“快捷方式”。
相反,将JFrame的实例传递给创建JPanel的类或方法。
答案 1 :(得分:3)
在一个较大的程序中,由于你所说的原因,你可能会遇到麻烦 - 无论是static
- 本身还是它表明存在更大的设计缺陷(并暗示更多)存在严重问题)。对于一个简单的一次性,它并不理想,但听起来它可以为你完成工作,只要确保你在评论中记录你为什么这样做。
一般而言,有更合适的方法可以做到这一点,例如:正确使用事件监听器,继承等。
例如,如果您的JFrame
创建了一个子JPanel
,并且您需要从其他地方访问JPanel
,请考虑在您的JFrame
派生类中实现公开的方法相关功能,而不是试图从外部直接操纵JPanel
。
答案 2 :(得分:0)
您可以考虑在包含静态主
的类中采用以下范例public class MyMainClass {
private static MyMainClass me;
public static void main(String[] args) {
me = new MyMainClass();
me.start(args);
}
private void start(String[] args) {
....
答案 3 :(得分:0)
我能做到的唯一方法就是在我的main中静态声明JFrame然后在JFrame中调用一个方法来调用我的JPanel中的方法
您可以轻松定义从JPanel派生的类,并添加一个变量来保存对JFrame的引用;然后你可以在面板类的事件处理程序方法中调用JFrame的方法(可能是你自己的自定义JFrame子类)。
JPanel.getParent()方法很可能不返回JFrame,而是返回其contentPane等;不要浪费时间。