java - How to get JButtons to print integers in a JTextField by using Action Listener and Action Event? -
i trying create , hypothetical atm gui interface enter in couple of numbers through keypad. having trouble having program display numbers after user clicks of buttons. have created 1 button time sake:
public jbutton jbtone = new jbutton(standard_btn_texts[0][0]); so if user clicks 'jbtone' 4 times. jtextfield should display 1111. problem button unresponsive line of code:
addactionlistener(listener) how jbuttons print integers in jtextfield? have gotten work before, have since failed work again after adding in more user friendly line of code:
private static final string[][] standard_btn_texts = { {"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}, { "0" } can point me in right direction? appreciated!
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.jframe; import java.awt.event.actionlistener; import java.awt.event.actionevent; import java.awt.event.keyevent; import javax.swing.abstractbutton; import javax.swing.imageicon; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.flowlayout; import javax.swing.jframe; import javax.swing.jlabel; import javax.swing.swingconstants; import javax.swing.icon; import javax.swing.imageicon; import javax.swing.jpasswordfield; public class terminalatm extends jframe { private jpanel panel; public final jpasswordfield passwordfield = new jpasswordfield(2); private static final string[][] standard_btn_texts = { {"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}, { "0" } }; private static final int gap = 5; private static final font btn_font = new font(font.dialog, font.bold, 20); public jbutton jbtone = new jbutton(standard_btn_texts[0][0]); private jtextfield jtfnumber1 = new jtextfield(8);//define number field public terminalatm() { setdefaultcloseoperation(jframe.exit_on_close); setlocationrelativeto(null); jpanel standardpanel = createbtnpanel(standard_btn_texts, "keypad"); jpanel buttonpanel = new jpanel(); buttonpanel.setlayout(new gridlayout(0, 1)); buttonpanel.add(jtfnumber1, borderlayout.north); buttonpanel.add(standardpanel, borderlayout.south); btnlistener listener = new btnlistener(); jbtone.addactionlistener(listener); textfieldhandler handler = new textfieldhandler(); passwordfield.addactionlistener(handler); add(buttonpanel, borderlayout.line_start); setsize(450, 500); setvisible(true); } //create unique rows of buttons private jpanel createbtnpanel(string[][] texts, string title) { jpanel btnpanel = new jpanel(); int rows = texts.length; int cols = texts[0].length; btnpanel.setlayout(new gridlayout(rows, cols, gap, gap)); (int row = 0; row < texts.length; row++) { (int col = 0; col < texts[row].length; col++) { jbutton btn = new jbutton(texts[row][col]); btn.setfont(btn_font); btnpanel.add(btn); } } btnpanel.setborder(borderfactory.createtitledborder(title)); return btnpanel; } private class textfieldhandler implements actionlistener { @override public void actionperformed(actionevent event) { string string = ""; if(event.getsource()==passwordfield) string = string.format("textfield1: %s", event.getactioncommand()); } } /**** create button listener , action listener ****/ class btnlistener implements actionlistener { @override public void actionperformed(actionevent e) { /* set each button action event */ /* button 1 brevity */ int int1=0; if(e.getsource().equals(jbtone)) { int1 = 1; passwordfield.settext(string.valueof(int1)); } } } public static void main(string[] args) { swingutilities.invokelater(new runnable() { public void run() { new terminalatm(); } }); } }//endterminalatm
in following code got button listener respond , output text of clicked button show in text field. changes documented starting /****, explain did.
/* * change template, choose tools | templates * , open template in editor. */ package logging; import java.awt.borderlayout; import java.awt.font; import java.awt.gridlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import javax.swing.borderfactory; import javax.swing.jbutton; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jpasswordfield; import javax.swing.jtextfield; import javax.swing.swingutilities; public class terminalatm extends jframe { private jpanel panel; public final jpasswordfield passwordfield = new jpasswordfield(2); private static final string[][] standard_btn_texts = { {"1", "2", "3"}, {"4", "5", "6"}, {"7", "8", "9"}, { "0" } }; private static final int gap = 5; private static final font btn_font = new font(font.dialog, font.bold, 20); /**** purpose of jbutton ? */ public jbutton jbtone = new jbutton(standard_btn_texts[0][0]); private jtextfield jtfnumber1 = new jtextfield(8);//define number field public terminalatm() { setdefaultcloseoperation(jframe.exit_on_close); setlocationrelativeto(null); jpanel standardpanel = createbtnpanel(standard_btn_texts, "keypad"); jpanel buttonpanel = new jpanel(); buttonpanel.setlayout(new gridlayout(0, 1)); buttonpanel.add(jtfnumber1, borderlayout.north); buttonpanel.add(standardpanel, borderlayout.south); /**** action listener should go on button pressed see createbtnpanel */ // btnlistener listener = new btnlistener(); // jbtone.addactionlistener(listener); /**** purpose of jpasswordfield ? not being added jpanel */ textfieldhandler handler = new textfieldhandler(); passwordfield.addactionlistener(handler); add(buttonpanel, borderlayout.line_start); setsize(450, 500); setvisible(true); } //create unique rows of buttons private jpanel createbtnpanel(string[][] texts, string title) { jpanel btnpanel = new jpanel(); int rows = texts.length; int cols = texts[0].length; btnpanel.setlayout(new gridlayout(rows, cols, gap, gap)); /**** create listener */ btnlistener listener = new btnlistener(); (string[] text : texts) { (string element : text) { jbutton btn = new jbutton(element); btn.setfont(btn_font); /**** add listener each button*/ btn.addactionlistener(listener); btnpanel.add(btn); } } btnpanel.setborder(borderfactory.createtitledborder(title)); return btnpanel; } private class textfieldhandler implements actionlistener { @override public void actionperformed(actionevent event) { string string = ""; if(event.getsource()==passwordfield) { string = string.format("textfield1: %s", event.getactioncommand()); } } } /**** create button listener , action listener ****/ class btnlistener implements actionlistener { @override public void actionperformed(actionevent e) { /* set each button action event */ /* button 1 brevity */ /**** purpose of ? int int1=0; */ /**** event generated button created in createbtnpanel e.getsource() can not equal jbtone. should instance of jbutton */ if(e.getsource() instanceof jbutton) { /**** jbutton clicked */ jbutton button = (jbutton) e.getsource() ; /**** display text on text field */ jtfnumber1.settext(button.gettext()); } } } public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { /**** new multiplepanels(); un defined */ new terminalatm(); } }); } }//endterminalatm i need better understand functionality want achieve password field , action listener, can try further, if needed. (0:
Comments
Post a Comment