java - 从 jframe 上添加的 jpanel 类调用 jframe 中的函数

标签 java swing jpanel

我有 1 个名为frame 的 jframe,jframe 中有 1 个名为 mainpanel 的 jpanel,以及来自另一个名为 ControlPanel 的类的 1 个 jpanel。

jpanel ControlPanel 已添加到 jframe 框架的主面板中。

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

在 jframe 框架内,我有一个函数:

public void hideComponents(){
//code here
}

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

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

private MainFrame frame;

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

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

最佳答案

您必须将 MainFrame 类实例作为参数传递到 ControlPanel 构造函数中 然后从那里调用 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);
}

关于java - 从 jframe 上添加的 jpanel 类调用 jframe 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27606852/

相关文章:

java - 使用 Itext 从 pdf 检索图像时出错

java - 如何获得一年的开始和结束日期?

java - 如何在JFrame java中显示两个 Canvas

java - 在 Jsplitpane 中同时显示两个面板且同一面

java - JPanel 在 JScrollPane 中不可见

java - Tomcat 部署配置即服务

java - 我们什么时候认为 Executor Service 中的工作线程是空闲的

java - 如何从 jlist 中删除一个项目

java - 如何更新 JLabel 文本?

java - 为什么 Jtoolbar 会破坏我的 keyBindings?