1. package org.jr.swing;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年3月14日
  6. * @author Cherami
  7. */
  8. import java.awt.*;
  9. import java.awt.event.*;
  10. import javax.swing.*;
  11. import org.jr.text.*;
  12. import org.jr.util.*;
  13. /**
  14. * 内存状况监视面板。
  15. * 简化了监视内容使用状况的工作。
  16. * @since 0.5
  17. */
  18. public class MemoryWatchPanel
  19. extends JPanel {
  20. private static final String defaultFormat = "%1/%2(M)";
  21. int interval;
  22. String[] values = new String[2];
  23. private Timer timer;
  24. protected JLabel label;
  25. Runtime runtime = Runtime.getRuntime();
  26. String format;
  27. FileSizeFormat formatter = new FileSizeFormat();
  28. /**
  29. * 构造一个监测虚拟机内存使用状况的MemoryWatchPanel。
  30. * @since 0.5
  31. */
  32. public MemoryWatchPanel() {
  33. this(3000, defaultFormat);
  34. }
  35. /**
  36. * 根据指定的格式显示虚拟机的内容状况的MemoryWatchPanel。
  37. * @param format 显示格式
  38. * @see org.jr.util.StringUtil#getReplaceString(String source, String[] values) StringUtil.getReplaceString(String source, String[] values)
  39. * @since 0.5
  40. */
  41. public MemoryWatchPanel(String format) {
  42. this(3000, format);
  43. }
  44. /**
  45. * 以指定的格式和时间间隔构造一个显示虚拟机的内容状况的MemoryWatchPanel。
  46. * @param interval 监测的时间间隔,以毫秒为单位
  47. * @param format 显示格式
  48. * @see org.jr.util.StringUtil#getReplaceString(String source, String[] values) StringUtil.getReplaceString(String source, String[] values)
  49. * @since 0.5
  50. */
  51. public MemoryWatchPanel(int interval, String format) {
  52. this.interval = interval;
  53. this.format = format;
  54. setLayout(new BorderLayout());
  55. label = new JLabel();
  56. add(label, "Center");
  57. updateStatus();
  58. timer = new Timer(interval, new ActionListener() {
  59. public void actionPerformed(ActionEvent ev) {
  60. updateStatus();
  61. }
  62. });
  63. timer.setRepeats(true);
  64. timer.start();
  65. }
  66. /**
  67. * 以指定的时间间隔构造一个显示虚拟机的内容状况的MemoryWatchPanel。
  68. * @param interval 监测的时间间隔,以毫秒为单位
  69. */
  70. public MemoryWatchPanel(int interval) {
  71. this(3000, defaultFormat);
  72. }
  73. /**
  74. * 设置显示格式。
  75. * @param format 格式
  76. */
  77. public void setFormat(String format) {
  78. this.format = format;
  79. }
  80. /**
  81. * 设置时间间隔。
  82. * @param interval 监测的时间间隔,以毫秒为单位
  83. */
  84. public void setInterval(int interval) {
  85. this.interval = interval;
  86. timer.setDelay(interval);
  87. }
  88. /**
  89. * 更新内存状况。
  90. */
  91. private void updateStatus() {
  92. values[0] = formatter.format(runtime.freeMemory(), FileSizeFormat.MEGA);
  93. values[1] = formatter.format(runtime.totalMemory(), FileSizeFormat.MEGA);
  94. label.setText(StringUtil.getReplaceString(format, values));
  95. }
  96. }