java - KeyListener and keyPressed -
i'm trying build screen keyboard , need little help. idea: text copied(copy , paste )from external source used learning touch typing.
when type correct character, character highlighted in jtextarea green color, , button color changed green, if type incorrect character, button change color red
when press in pc keyboard buttons on screen keyboard not changes background green .
public class box extends jframe { jframe frame = new jframe("box value & area"); gridlayout form_grig = new gridlayout(3,0); gridlayout panel_grid = new gridlayout(1,18); jpanel ans = new jpanel(new gridlayout(1,2)); final jlabel label =new jlabel("points : "); final jlabel label2 = new jlabel("answer "); final jlabel label3 = new jlabel("length : "); final jlabel label4 = new jlabel("volume"); public int index=0; public int counter=0; public int press_count=-1; jpanel panel = new jpanel(); private jpanel parent = new jpanel(new gridlayout(0, 1)); final jtextarea text1 = new jtextarea(); private jbutton[][] button; private jpanel[] panel = new jpanel[6]; public jbutton start = new jbutton("start game"); private static final string[][] key = { {"esc", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12", "num", "insert", "delete", "pause"}, {"~\n`", "1", "2", "3", "4", "5","6", "7", "8", "9", "0", "-", "=", "backspace "}, {" tab ", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "{", "}", "|"}, {"caps lock","a", "s", "d", "f", "g", "h", "j", "k", "l", ";", "'", " enter "}, {" shift ", "z", "x", "c", "v", "b","n", "m", "<", ">", "?", "shift"}, {"ctrl", "fn", "alt", " space ", "alt","ctrl"}}; public box(){ frame.setlayout(form_grig); frame.add(text1 ); ans.add(label); ans.add(label2); button = new jbutton[20][20]; (int row = 0; row < key.length; row++) { panel[row] = new jpanel(); (int column = 0; column < key[row].length; column++) { button[row][column] = new jbutton(key[row][column]); button[row][column].putclientproperty("column", column); button[row][column].putclientproperty("row", row); button[row][column].putclientproperty("key", key[row][column]); button[row][column].addactionlistener(new myactionlistener()); panel[row].add(button[row][column]); } parent.add(panel[row]); } frame.add(ans); frame.add(parent); frame.pack(); frame.setresizable(false); frame.setvisible(true); font font = new font("verdana", font.bold, 56); label2.setfont(font); label2.setforeground(color.gray); label.setfont(font); label.setforeground(color.gray); } public class myactionlistener implements actionlistener { string te = text1.gettext(); @override public void actionperformed(actionevent e) { final jbutton btn =(jbutton) e.getsource(); text1.addkeylistener(new keylistener(){ @override public void keypressed(keyevent e) { if (!text1.gettext().equals("")){ text1.seteditable(false); } btn.setbackground(color.green); system.out.println("this :"+ btn.getname()); } @override public void keyreleased(keyevent e) { //dsd } @override public void keytyped(keyevent e) {//sdsd // todo auto-generated method stub } }); string te = text1.gettext(); string size = null; if(press_count >= te.length() ){ joptionpane.showmessagedialog(null, "from "+te.length() +" characters guess "+index ); } press_count++; size = integer.tostring(te.length());//adad if (index==0) counter=te.length(); label2.settext(size); //settext string bbb = (string) btn.getclientproperty("key") ; if(bbb.equals(string.valueof(te.charat(index)))){ btn.setbackground(color.green); label2.settext(integer.tostring(counter)); } else{ btn.setbackground(color.red);//setting background counter--; label2.settext(integer.tostring(counter)); } index++;// } }
why when press pc buttons, buttons on screen keyboard doesn't change background color ?
"why when press pc buttons, buttons on screen keyboard doesn't change background color"
they change, @ logic,:
it should change color when key pressed on text area. meaning need focus text area , type something.
you adding multiple keylistener
text area, on every button press. don't think trying do.
actually. shouldn't using keylistener
at all text components. changes in underlying document of text components should listened via documentlistener
. documentlistener
should added once text area, outside of actionlistener
. reason component may have more 1 listener registered it, if same listener (as doing). happens each listener call gets put queue. if you've pressed 10 buttons, text area have 10 listener callbacks, , every time press key, call called 10 times.
you should read more on how use documentlistner
also presses of changing of color button, may want take @ this question.
Comments
Post a Comment