从 JBel 上添加的 jPanel 类调用 JBframe 中的函数



我有 1 个名为 frame 的 jframe,1 个名为 mainpanel 的 jframe 中的 jPanel 和来自另一个名为 ControlPanel 的类的 1 个 jPanel。

jpanel 控制面板被添加到 jframe 的主面板中。

private void onLoad(){
ControlPanel cpanel = new ControlPanel;
mainpanel.add(cpanel);
}

在 JFframe 中,我有一个函数:

public void hideComponents(){
//code here
}

由于我已经将 cPanel 添加到框架的主面板中,如何从 cPanel 中调用框架中的函数?

我所做的是在控制面板类中声明框架

private MainFrame frame;

然后创建了一个调用框架函数的按钮

frame.hideComponents(); // error occurs pointing here "NullPointerException"

您必须将大型机类实例作为参数传递到控制面板构造函数中然后从那里调用 hideComponents 方法。示例如下:

public final class ControlPanel extends JPanel {
    // Optional: you can even declare your MainFrame as private field member
    // if you want to keep track of the frame instance. But let's assume
    // you don't need that in your occasion
    public ControlPanel(MainFrame frame) {
          frame.hideComponents();
    }
    //maybe other code 
    ...
}

例:

private void onLoad(){
  ControlPanel cpanel = new ControlPanel(MainFrame.this);
  mainpanel.add(cpanel);
}

你的对象没有初始化。

尝试

frame = new MainFrame();
frame.hideComponents();

最新更新