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:
- you should add components frame before making frame visible.
- 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
Post a Comment