1. package org.jr.swing.table;
  2. /**
  3. * Copyright: Copyright (c) 2002-2004
  4. * Company: JavaResearch(http://www.javaresearch.org)
  5. * 最后更新日期:2003年3月21日
  6. * @author Cherami
  7. */
  8. import java.text.*;
  9. import java.awt.*;
  10. import javax.swing.*;
  11. import javax.swing.table.*;
  12. /**
  13. * 以一定格式将对象格式化为字符串显示的表格单元渲染器。
  14. * @since 0.5
  15. */
  16. public class FormatCellRenderer
  17. extends DefaultTableCellRenderer
  18. implements TableCellRenderer {
  19. protected Format formatter;
  20. /**
  21. * 以指定的格式器生成一个FormatCellRenderer。
  22. * @since 0.5
  23. */
  24. public FormatCellRenderer() {
  25. formatter = new MessageFormat("{0}");
  26. }
  27. /**
  28. * 以指定的格式器生成一个FormatCellRenderer。
  29. * @since 0.5
  30. */
  31. public FormatCellRenderer(Format formatter) {
  32. this.formatter = formatter;
  33. }
  34. /**
  35. * 对单元进行渲染。
  36. * @param table 要渲染的表格
  37. * @param value 表格单元的值,必须是Number类型的值
  38. * @param isSelected 是否选中
  39. * @param hasFocus 是否得到焦点
  40. * @param row 行数
  41. * @param column 列数
  42. * @return 经渲染后的表格单元
  43. * @since 0.5
  44. */
  45. public Component getTableCellRendererComponent(JTable table,
  46. Object value,
  47. boolean isSelected,
  48. boolean hasFocus,
  49. int row,
  50. int column) {
  51. return super.getTableCellRendererComponent(table, format(value), isSelected,
  52. hasFocus, row, column);
  53. }
  54. /**
  55. * 将表格单元的值格式化。
  56. * @param value 原始值
  57. * @return 格式化以后的值
  58. * @since 0.5
  59. */
  60. protected String format(Object value) {
  61. return formatter.format(value);
  62. }
  63. /**
  64. * 设置格式器。
  65. * @param formatter 格式器
  66. * @since 0.5
  67. */
  68. public void setFormatter(Format formatter) {
  69. this.formatter = formatter;
  70. }
  71. /**
  72. * 得到所使用的格式器。
  73. * @return 所使用的格式器
  74. * @since 0.5
  75. */
  76. public Format getFormatter() {
  77. return formatter;
  78. }
  79. }