gpt4 book ai didi

java - 重写 JFrame.setBackground() 时遇到问题

转载 作者:行者123 更新时间:2023-12-02 03:27:48 24 4
gpt4 key购买 nike

我有一个名为 MainUI 的类,它扩展了 JFrame,它具有以下代码:

//Constructor
public MainUI(){

// components/panels are already defined and initialized here.

setBackground(Color.decode("#EFF4E4"));
}

@Override
public void setBackground(Color colorbg){ //a method to set the same background color for all the components I ave

getContentPane().setBackground(colorbg);

decisionPanel.setBackground(colorbg);

adbRadio.setBackground(colorbg);
fastbootRadio.setBackground(colorbg);
commandRadio.setBackground(colorbg);

pushPanel.setBackground(colorbg);
uninstallPanel.setBackground(colorbg);
pcPanel.setBackground(colorbg);
phonePanel.setBackground(colorbg);
}

但是,当我编译时,它在行 [decisionPanel.setBackground(colorbg); 处给出 NullPointerException; ]

我尝试不重写 setBackground 方法并将其重命名,并且代码工作正常,我不知道为什么重写 setBackground 方法会导致问题?

我确定所有面板/组件在调用该方法之前都已初始化,很明显,因为代码在我重命名该方法后才起作用。

最佳答案

这是 JFrame 类中的一段代码,它实际上是在从构造函数中执行不建议的可重写方法调用,所发生的情况是,您的重写版本在创建类之前执行,并且在初始化字段之前执行,并且它们不是在 super 构造函数完成其工作之前初始化字段的方法”,因此您几乎没有选择,要么避免在重写的方法中引用子类字段,要么通过创建新方法来完成您想要的事情

public JFrame(String title, GraphicsConfiguration gc) {
super(title, gc);
frameInit();
}

/** Called by the constructors to init the <code>JFrame</code> properly. */
protected void frameInit() {
enableEvents(AWTEvent.KEY_EVENT_MASK | AWTEvent.WINDOW_EVENT_MASK);
setLocale( JComponent.getDefaultLocale() );
setRootPane(createRootPane());
setBackground(UIManager.getColor("control"));
setRootPaneCheckingEnabled(true);
if (JFrame.isDefaultLookAndFeelDecorated()) {
boolean supportsWindowDecorations =
UIManager.getLookAndFeel().getSupportsWindowDecorations();
if (supportsWindowDecorations) {
setUndecorated(true);
getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
}
}
sun.awt.SunToolkit.checkAndSetPolicy(this);
}

或者您可以重写frameInit()

@Override
protected void frameInit() {
//initialize your fields here
super.frameInit();
}

关于java - 重写 JFrame.setBackground() 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38574105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com