3

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

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

2 回答 2

6

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

长解释:

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

public class ExtendedJTable extends JTable{}

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

这种方法有一些好处,也有一些限制。如需更深入的讨论,请查看这篇文章

于 2011-09-02T20:03:19.560 回答
2

你在这里做两件事:

  • 创建一个扩展 JTable 的类的对象。这是一个匿名类,因为它没有在其他任何地方单独声明。
  • 在这个类中,您覆盖了 JTable 的方法 getCellRenderer(int row, int column);
于 2011-09-02T20:05:18.703 回答