Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java swing error " 'void' type not allowed here " [duplicate]

I'm getting an error 'void' type not allowed here

CODE:

public void create(JPanel jp){
    jp.add(new JButton().setPreferredSize(new Dimension(40, 40)));        
}

But when I use the same code without .setPreferredSize(new Dimension(40, 40)) it works fine.

WORKING CODE

public void create(JPanel jp){
    jp.add(new JButton());
}
like image 623
chalitha geekiyanage Avatar asked Feb 10 '26 17:02

chalitha geekiyanage


2 Answers

setPreferredSize "returns" a void, so it cannot be passed as a parameter to add. You'd have to break up the code and separate to several statements:

public void create(JPanel jp){
    JButton myButton = new JButton();
    myButton.setPreferredSize(new Dimension(40, 40));
    jp.add(myButton);
}
like image 163
Mureinik Avatar answered Feb 12 '26 14:02

Mureinik


Internal code of setPreferredSize from here http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/javax/swing/JComponent.java#JComponent.setPreferredSize%28java.awt.Dimension%29

public void setPreferredSize(Dimension preferredSize) {                    
  super.setPreferredSize(preferredSize);
}

When you are trying to execute this code

jp.add(new JButton().setPreferredSize(new Dimension(40, 40))); 

new JButton().setPreferredSize(new Dimension(40, 40)) return void, Thats why you are getting this 'void' type not allowed here

When you trying to add only new JButton() then its working fine because you are adding instance of JButton.

Solution :

JButton myButton = new JButton();
myButton.setPreferredSize(new Dimension(40, 40));
jp.add(myButton);
like image 27
Shiladittya Chakraborty Avatar answered Feb 12 '26 16:02

Shiladittya Chakraborty