【问题标题】:call function in the jframe from the jpanel class which was added on jframe从 jframe 上添加的 jpanel 类调用 jframe 中的函数
【发布时间】:2014-12-22 16:45:03
【问题描述】:

我有 1 个名为 frame 的 jframe,在名为 mainpanel 的 jframe 中有 1 个 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"

【问题讨论】:

  • 你的对象没有初始化..

标签: java swing jpanel


【解决方案1】:

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

【讨论】:

  • 我如何把它放在一个按钮上点击控制面板?
  • 您在 ControlPanel 中添加一个按钮,使用 a 在我的回答中为您提供的选项,并声明/引入您的 MainFrame 作为类字段。最后,为您的按钮分配一个 onclickListener 以便能够听到点击事件。在 clickListener 的方法主体中,您调用 MainFrame 的 hideComponents 方法
【解决方案2】:

您的对象未初始化..

试试

frame = new MainFrame();

frame.hideComponents();

【讨论】:

  • 我认为它不起作用。但是在查看了 hideComponents() 函数中的代码后,似乎我无法将 jPanel 的可见性设置为 false。这是为什么?但你的代码有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多