java - JTable edting mode -


i've implemented method user inputs set decimal format. there's 2 forms of editing jtable cells (?).

in 1 of them (first pic) when user selects cell , start writing cell editor doesn't work.

but in other, when double clicks cell editor works.

there's way allow editing when user double clicks?

ps.: iscelleditable , setclickcounttostart didn't work.

import java.awt.borderlayout; import java.awt.dimension; import java.awt.eventqueue; import java.awt.event.keyadapter; import java.awt.event.keyevent; import javax.swing.defaultcelleditor; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jscrollpane; import javax.swing.jtable; import javax.swing.jtextfield; import javax.swing.border.emptyborder; import javax.swing.table.defaulttablemodel; import javax.swing.table.tablecolumn;  public class example extends jframe {      private jpanel contentpane;      public static void main(string[] args) {         eventqueue.invokelater(new runnable() {             public void run() {                 try {                     example frame = new example();                     frame.setvisible(true);                 } catch (exception e) {                     e.printstacktrace();                 }             }         });     }      public example() {         setdefaultcloseoperation(jframe.exit_on_close);         setbounds(100, 100, 450, 300);         contentpane = new jpanel();         contentpane.setborder(new emptyborder(5, 5, 5, 5));         contentpane.setlayout(new borderlayout(0, 0));         setcontentpane(contentpane);          jtable table = new jtable(new defaulttablemodel(new object[]{"rb"}, 10));          table.setpreferredscrollableviewportsize(new dimension(700, 350));         tablecolumn rbcolumn = table.getcolumnmodel().getcolumn(0);         rbcolumn.setcelleditor(new defaultcelleditor(tfmon()));           jscrollpane scrollpane = new jscrollpane(table);          contentpane.add(scrollpane, borderlayout.center);     }       private jtextfield tfmon(){         jtextfield tf = new jtextfield();         tf.addkeylistener(new keyadapter() {             public void keytyped(keyevent e) {                 char c = e.getkeychar();                 if (!((c >= '0') && (c <= '9') || (c ==         keyevent.vk_back_space) || (c == keyevent.vk_delete))){                     e.consume();                 }else{                     string txt = tf.gettext();                     txt = txt.replace(".","").replace("0","");                     if(!((c == keyevent.vk_back_space) || (c == keyevent.vk_delete))){                         e.consume();                         txt=txt+c;                     }                     while(txt.length()<3){                         txt="0"+txt;                     }                     txt = txt.substring(0,txt.length()-2)+"."+txt.substring(txt.length()-2,txt.length());                     tf.settext(txt);                 }             }         });            return tf;     } } 

case 1 happens when user types in condition enter image description here

there's way allow editing when user double clicks?

the problem editor. solution should fix editor, not prevent user typing directly text field.

i'm not sure editor doing looks trying enter numbers in editor.

if case should:

  1. override getcolumnclass(...) method of tablemodel return integer or double. table use appropriate editor allow numeric data entered. won't need write custom editor.

  2. if want custom editing, instead of using jtextfield can use jformattedtextfield in specify mask allow numeric values

  3. finally complicated use documentlistener on document of text field (instead of keylistener). documentevent generated whenever document changed.

edit:

you might able code work using:

table.setsurrendersfocusonkeystroke( true ); 

i believe should pass keyevents editor when cell not in editing mode.

actually, remembered may have better solution. use custom jtextfield implement logic, instead of keylistener. check out code in: make jformattedtextfield behave atm input

i haven't tried using text field editor, see no reason why won't work logic not based on keyevents.


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -