• JFrame上添加、删除Jpanel后动态显示界面问题


    JFrame中动态添加或者删除JPanel后总是不正确显示需要的界面问题:

    1.删除panel后还是显示之前的界面,新删除的panel在界面上并没有被删除;

    2.删除panel1后添加新的panel2,只显示删除panel1后的界面,新添加的panel2不显示;

    尽管使用了Pane().repaint();重绘方法,照理来说是可以重新绘制新的界面的,但是界面并没有更新。

    那么这里就分两种情况处理:

    1.删除或者添加一个非JFrame的直接子控件。

    scrollPanel.removeAll();//删除scrollPanel的所有子控件,或者scrollPanel.remove(comp);删除scrollPanel的某个控件。

    scrollPanel.updateUI();

    这里一定要用updateUI()函数,当scrollPanel的内容或者说界面发生变化时需要更新其UI显示。添加也同理。

    contentPanel.add(keyLable);//contentPanel添加一个控件

    contentPanel.updateUI();

    2.删除一个JFrame的直接子控件。

    resultFrame.getContentPane().remove(exceptionLabel);//JFrame删除其直接子控件exceptionLabel

    resultFrame.getContentPane().repaint();

    因为JFrame没有updateUI()函数,所以这里使用重绘函数repaint();

    3.JFrame动态添加一个控件,不管这个控件是否还有很多子控件,情况都一样,可以对其子控件使用updateUI()函数。

    但是,这还远远不够,你会发现不管添加了什么控件,这个时候界面就是没有更新。

    原因是JFrame没有更新。

    你可以尝试放大或者缩小窗口,界面就更新了。

    那么怎么处理呢?不可能每次都要放大或缩小窗口吧,所以,这里就需要对JFrame进行刷新其界面的操作。

    方法1.重新显示窗体。

    resultFrame.getContentPane().add(scrollPanel);
    resultFrame.setVisible(false);
    resultFrame.setVisible(true);

    方法2.重新验证窗体。

    resultFrame.getContentPane().add(scrollPanel);
    resultFrame.invalidate();
    resultFrame.validate();

    方法3.重置其窗体大小。

    resultFrame.getContentPane().add(scrollPanel);
    resultFrame.pack();
    resultFrame.setSize(1000, 600);

    方法远不止上面这几种,但是仅通过这个方法resultFrame.getContentPane().repaint();这个一定是不行的,他不会真正同步重新更新JFrame,除非有外界因素更新到JFrame,不然界面是不会刷新的。

  • 相关阅读:
    get first、set all策略QWrap的FunctionH.mul变换 之一
    Maven学习:部分常见问题记录
    Hibernate异常记注:onetoone和catelog冲突
    RCP学习:Splash状态栏
    RCP学习:内容提示\代码提示\代码补全
    导出Eclipse Product的方法
    转载:OSGI组件依赖
    Type checking
    ObjectOriented Programming —— object(随记)
    一个不错的JavaScript模拟滚动条
  • 原文地址:https://www.cnblogs.com/hejing-swust/p/8058834.html
Copyright © 2020-2023  润新知