swing - Java syntax for separating action listeners -


please me out separate these actionlisteners in periodic table attempting complete. when execute program , click on 'h', opens other elements , when others clicked, not work. need way separate these using method...

import javax.swing.*; import java.awt.*;  import java.awt.event.*;  public class periodictable { public static void main (string[] args) {       jframe frame = new jframe("elements");   frame.setvisible(true);     frame.setsize(1000,1500);     frame.setdefaultcloseoperation(jframe.exit_on_close);  jpanel panel = new jpanel();     frame.add(panel);  jbutton button1 = new jbutton("h"); panel.add(button1); button1.addactionlistener (new action1());  jbutton button2 = new jbutton("he"); panel.add(button2);  button2.addactionlistener (new action2());   jbutton button3 = new jbutton("li"); panel.add(button3);  button3.addactionlistener (new action2());    } static class action1 implements actionlistener  {         public void actionperformed (actionevent e)  {       jframe frame2 = new jframe("h");          frame2.setvisible(true); frame2.setsize(1000,1500);          jlabel label = new jlabel("hydrogen");             jpanel panel = new jpanel();         frame2.add(panel);             panel.add(label);          } }    static class action2 implements actionlistener {           public void actionperformed (actionevent e)  {          jframe frame3 = new jframe("he");     frame3.setvisible(true);     frame3.setsize(1000,1500);     jlabel label = new jlabel("helium");     jpanel panel = new jpanel();     frame3.add(panel);     panel.add(label);         } } static class action3 implements actionlistener {           public void actionperformed (actionevent e)  {          jframe frame4 = new jframe("li");     frame4.setvisible(true);     frame4.setsize(1000,1500);     jlabel label = new jlabel("lithium");     jpanel panel = new jpanel();     frame4.add(panel);     panel.add(label);         } }    } 

thanks in advance. (note: first 3 elements coded for...)

when execute program , click on 'h', opens other elements

only 1 frame opens me.

and when others clicked, not work.

each button opens single frame me.

however, button 3 opens wrong frame because add wrong listener button:

//button3.addactionlistener (new action2()); button3.addactionlistener (new action3()); 

other issues:

  1. you should add components frame before making frame visible.
  2. don't hardcode screen sizes, never know size screen other users using

so order of code might like:

jlabel label = new jlabel("helium"); jpanel panel = new jpanel(); panel.add(label);  jframe frame3 = new jframe("he"); frame3.add(panel); frame3.pack(); frame3.setvisible(true); 

and of course don't want create dozens of separate actionlisteners. want make listener more generic can shared.

something like:

static class action implements actionlistener {           public action(string element, string description)   {     this.element = element;     this.description = description;   }    public void actionperformed (actionevent e)  {          jlabel label = new jlabel(description);     jpanel panel = new jpanel();     panel.add(label);      jframe frame3 = new jframe(element);     frame3.add(panel);     frame3.pack();     frame3.setvisible(true); } } 

then when create listener use:

button3.addactionlistener (new action("he", "helium")); 

Comments

Popular posts from this blog

php - Invalid Cofiguration - yii\base\InvalidConfigException - Yii2 -

How to show in django cms breadcrumbs full path? -

ruby on rails - npm error: tunneling socket could not be established, cause=connect ETIMEDOUT -