Java初始化块

时间:2011-09-02 19:58:50

标签: java swing jtable anonymous-class initializer

有人可以帮我理解以下构造吗?我无法理解这是初始化程序还是匿名类。我不熟悉这种语法。

   JTable jt = new JTable(data, fields) **{
            public TableCellRenderer getCellRenderer(int row, int column) {
                // TODO Auto-generated method stub
                return renderer;
            }
        };**

2 个答案:

答案 0 :(得分:6)

它创建了一个扩展JTable的匿名内部类,并覆盖了getCellRenderer方法。

冗长的解释:

您正在创建一个扩展JTable的类,而不显式为其指定名称而不是使用标准类声明:

public class ExtendedJTable extends JTable{}

此类的可见性仅限于定义和实例化的类。 它非常有用,例如,当您需要时,例如在您发布的代码中,覆盖特定类(JTable)的方法(getCellRenderer()),仅限于当前类上下文。

这种方法有一些好处,也有一些局限性。有关更深入的讨论,请查看此article

答案 1 :(得分:2)

你在这做两件事:

  • 创建一个扩展JTable的类的对象。这是一个匿名类,因为它没有在其他任何地方单独声明。
  • 在此类中,您重写JTable的方法getCellRenderer(int row,int column);