给Swing程序添加一个动态显示内存情况的状态条
来源:互联网 发布:c#数据库删除语句 编辑:程序博客网 时间:2024/04/29 08:22
cpoy from http://yanhua.blog.techweb.com.cn/archives/2006/200691815392.shtml#cmt
在前面的文章中我们提到过Eclipse可以显示一个动态显示内存使用情况的状态条,而且还有一个按钮可以手工进行垃圾回收,昨天我看到OSWorkflow的设计器也有这么一个功能,那到底是怎么实现的呢?其实一点都不难,我们只要写一个特殊的JPanel就可以了!
class MemoryPanel extends JPanel { //状态条的颜色 private Color edgeColor = new Color(82, 115, 214); private Color centerColor = new Color(180, 200, 230);
public void paint(Graphics g) { super.paint(g); //得到当前组件(JPanel)的大小 Dimension dimension = getSize(); //得到各边框的宽度 Insets insets = getInsets(); int left = insets.left; int top = insets.top; //得到内存使用状态信息 Runtime runtime = Runtime.getRuntime(); long freeMemory = runtime.freeMemory(); long totalMemory = runtime.totalMemory(); //组件(JPanel)除去左、右边框后的宽度 int insideWidth = dimension.width - (insets.left + insets.right); //内存使用量的显示宽度 int usedAmount = insideWidth - (int) (((long) insideWidth * freeMemory) / totalMemory); int insideHeight = dimension.height - (insets.bottom + insets.top); Graphics2D g2 = (Graphics2D) g; //设置渐变效果的画笔 g2.setPaint(new GradientPaint(left, top, edgeColor, left, insideHeight / 2, centerColor, true)); g.fillRect(left, top, usedAmount, insideHeight); g.setColor(getBackground()); g.fillRect(left + usedAmount, top, insideWidth - usedAmount, insideHeight); g.setFont(getFont()); g.setColor(Color.black); //显示状态的文字 String memory = (Long.toString((totalMemory - freeMemory) / 1048576L) + "M of " + Long.toString(totalMemory / 1048576L) + 'M'); //确定文字的显示位置 FontMetrics fontmetrics = g.getFontMetrics(); int stringWidth = fontmetrics.charsWidth(memory.toCharArray(), 0, memory.length()); int stringHeight = fontmetrics.getHeight() - fontmetrics.getDescent(); //显示文字 g.drawString(memory, left + (insideWidth - stringWidth) / 2, top + (insideHeight + stringHeight) / 2); } }
有了这个JPanel,我们可以把它加到一个Frame或另一个Panel上去了。
然后再启动一个计时器以便能让上面的JPanel实时更新。
Timer timer = new Timer(2000, new ActionListener() { public void actionPerformed(ActionEvent actionevent) { memoryPanel.repaint(); } }); timer.start();
至于那个可以人工进行垃圾回收的小垃圾桶就更好做了,做一个带图标的JButton,在它的事件处理中进行垃圾回收并再调用一下上面那个JPanel的repaint()方法就可以了。
gcButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) { System.gc(); memoryPanel.repaint(); } });
- 给Swing程序添加一个动态显示内存情况的状态条
- 动态地往datagirdview中添加数据,当所添加的数据超过datagridview的显示范围后,滚动条就无法显示,程序出现假死状态,(scrollbars=both)
- 动态的给TextView添加一个图片
- 显示一个进程的内存状态
- 一个简单的给DataGrid添加滚动条
- 【控件】给地图添加一个简单的比例尺条
- Swing 添加滚动条
- 在没有网络的情况下,给用户显示最新的10条消息
- 给VC的控制台程序添加内存泄漏自动检测功能
- 给VC的控制台程序添加内存泄漏自动检测功能
- 一个简单的Swing程序
- 一个C程序运行时的内存分配情况
- 给一个正在运行的Docker容器动态添加Volume
- 给显示窗口添加一个Resizeable的角标
- 动态添加控件并显示滚动条
- VR/AR场景 中给人物添加血条 双面显示/ UI显示两个的处理
- java swing 中的列表框JList如何在程序中动态的添加和删除元素
- 一个用来给文件列表添加绝对路径的程序
- 写在今天
- 控制你的情感
- jsp页面跳转方法
- Makefile(用户态) && gcc
- C++多线程-Critical Section
- 给Swing程序添加一个动态显示内存情况的状态条
- 上火原因与治疗
- JVM的内存管理和垃圾回收
- Delphi中动态链接库两种调用方式的比较
- 上火治疗
- 动态调用 DLL 中的函数
- 今天来过,但不知道写什么?
- Flash实现动画影片中图片缓冲放大和缩小效果
- delphi内存管理