zoukankan      html  css  js  c++  java
  • 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,不然界面是不会刷新的。

  • 相关阅读:
    移动web开发资源大整合
    移动WEB模拟原声APP滑动删除
    jQuery的live绑定事件在mobile safari(iphone / ipad / ipod)上失效的解决方案
    精仿公众号菜单效果
    javascript markdown 解析器
    第四天
    第三天
    第二天
    第一天
    day5
  • 原文地址:https://www.cnblogs.com/hejing-swust/p/8058834.html
Copyright © 2011-2022 走看看