当前位置: 首页 > 知识库问答 >
问题:

如何不仅从JTabbedPane中移除JPanel,而且优雅地处理JPanel实例?

颜霖
2023-03-14

专家们,需要一些帮助。

private void refreshAgentUtilizationData() {
    TimerTask updateAgentDetailsTask = new TimerTask() {
        @Override
        public void run() {
            agentObj.updateData();
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    memChart.repaint();
                    System.out.println("This is from Agent monitor timer task...");
                }
            });
        }
    };
    agentMonTimer.scheduleAtFixedRate(updateAgentDetailsTask, 0, master_pollingInterval);
}

执行的JCheckBox操作(在类'A'中)如下所示,

先说一些细节:

agentmon_chartsui=扩展JPanel并添加到JTabbedPane的类,即类B

    private void agentMonSwitchActionPerformed(java.awt.event.ActionEvent evt) {                                               
    if (agentMonSwitch.isSelected()) {
        AgentMon_ChartsUI agentChartPane = new AgentMon_ChartsUI();
        Icon agentIcon = new javax.swing.ImageIcon(getClass().getResource("/resources/abc.png"));
        agentMonTabs.addTab("Agent runtime monitor", agentIcon, agentChartPane);
        agentMonTabs.setSelectedIndex(agentMonTabs.indexOfTab("Agent runtime monitor"));
    } else {
        agentMonTabs.remove(agentMonTabs.indexOfTab("Agent runtime monitor"));
    }
}

共有1个答案

牟稳
2023-03-14

有很多可能的方法可以处理这个问题。最简单的方法之一是重写JPanelRemoveNotify方法。当组件从其父容器中移除时,就会调用此命令。

@Override
public void removeNotify() {
    super.removeNotify()
    agentMonTimer.cancel();
    agentMonTimer.purge();
    agentMonTimer = nil;
}

注意:如果计时器是共享的,则可以取消计时器任务,但在创建它时需要维护对它的引用

 类似资料:
  • 关于这个有很多问题,但他们都提出了重新验证的东西……我的代码在一个类中工作,但如果它从另一个类触发则不工作。 我有一个JPanel,我想添加一个JPanel。 我有一个方法start Game()女巫应该删除当前添加到它的面板。 方法 startGame() 的工作原理,如果我直接从构造函数调用它。 如果我从另一个类调用startGame()方法,它将无法工作。 因此,如果在init之后,我调用s

  • 问题内容: 当我需要时会出现一个新的JPanel(超过了时间限制或用户按下了“提交”按钮)。但是几秒钟后,旧的JPanel的某些元素就会与新的JPanel的组件一起出现。我不明白为什么会这样。 我以为是因为我必须对其他线程更新窗口。但是第一个线程只需将旧面板添加一次(因此,应该完成)。在第二个线程中,我有一个中断的循环(因此,它也应该完成)。 这是我的代码: 问题答案: 从容器(框架)中删除组件(

  • 让我们假设我们有这样一个用python编写的琐碎守护进程: 我们使用< code>start-stop-daemon对其进行守护,默认情况下,它会在< code> - stop上发送< code > SIGTERM (< code > TERM )信号。 假设当前执行的步骤是。此时我们正在发送信号。 发生的情况是执行立即终止。 我发现我可以使用<code>signal.signal(signal.

  • 我目前正在尝试使用Swift中的GridBagLayout构建GUI。 在尝试为我正在处理的项目制作GUI时,遇到了一个问题: 创建物品列表时,面板超过了我的屏幕高度,因此我将框架的首选大小设置为900像素。 但是,该列表的高度超过900像素。因此,我尝试将一个JScrollPane添加到包含列表的面板中。只是没有一个。 我的框架架构是这样的:框架f- 我将ScrollPane应用于这些对象中的任

  • 我正在创建一个简单的程序,在那里我画一个黑色的椭圆形,在那里我用鼠标点击。然而,我希望一个新的椭圆形出现,旧的消失。我该怎么做?我把removeAll()方法插入到我的mousePressed方法中,但它对我不起作用。removeAll()方法是否适用于此?还是我应该用别的?很抱歉,如果答案很明显,但我仍然是新手,并试图学习。任何建议都将不胜感激。谢谢