Inline object instantiation and transformation in Java

GCon picture GCon · Jan 6, 2012 · Viewed 18.7k times · Source

I have come to Java from Visual Basic, and seem to think I have been, in many ways, spoiled :p

Is there a way to instantiate an object and modify it inline? Something like:

JFrame aFrame = new JFrame();   
aFrame.add(new JPanel() {.setSize(100,100) .setLocation(50,50) .setBackground(Color.red) });

I was able to @Override methods, but am looking for something simpler. I have search alot, but if there is a specific term for this kind of inline instantiation, it eludes me.

Thank you for your time!

Answer

ClickerMonkey picture ClickerMonkey · Jan 6, 2012

Yes but some people consider it hacky.

JFrame aFrame = new JFrame();
aFrame.add(new JPanel() {{
 setSize(100,100);
 setLocation(50,50);
 setBackground(Color.red);
}});

Basically you add another layer of {} (instance initialization block), which is executed when the panel is instantiated. therefore you can put any code in it. (like calling setters).