我有时看到这样的代码:
new myJFrame().setVisible(true);
我并不完全知道它是如何工作的,但它实际上创建了一个myJFrame
并将其设置为可见,作为在其构造函数中将其设置为可见的替代方法。
我想知道的是,如果有一种方法可以在JMenuItem或JButton上执行此操作以自动为其分配ActionListener而无需首先明确声明它,如:
myJMenu.add(new JMenuItem("Item").addActionListener(myActionListener));
据我所知,这是行不通的。
我并不完全需要它起作用,我只想知道它是否可行,因为它可以为我节省一些时间。
提前致谢。
答案 0 :(得分:3)
它被称为method chaining,简单地说,一个类是否支持它,具体取决于它是如何写的。
它的完成方式很简单:
public class Bar {
private Set<Foo> foos;
public Bar addFoo( Foo foo ) {
this.foos.add( foo );
return this;
}
}
从这里你也可以看出为什么不可能链接那些没有用这种方式编写的方法。
答案 1 :(得分:3)
你提出的代码不起作用,因为JMenuItem.addActionListener()
没有返回任何东西(它是一个void方法),所以没有什么可以作为JMenu.add()
的参数传递。
在第一个例子中,也没有返回,但没关系。
正如@biziclop所提到的,在某些编码风格中,大多数方法返回this
,以便它们可以链接在一起。例如,使用Builders 的Fluent Interface倾向于这样做。
答案 2 :(得分:3)
作为替代方案,请考虑使用带有JMenuItem
的{{1}}构造函数:
Action
答案 3 :(得分:0)
如果你想要肮脏,你可以对非final类进行匿名扩展,并添加一个匿名构造函数来初始化东西:
ArrayList ar=new ArrayList()
{
{
add(new Object());
}
};