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; } }
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:
override
getcolumnclass(...)method oftablemodelreturnintegerordouble. table use appropriate editor allow numeric data entered. won't need write custom editor.if want custom editing, instead of using jtextfield can use
jformattedtextfieldin specify mask allow numeric valuesfinally complicated use
documentlistenerondocumentof text field (instead of keylistener).documenteventgenerated 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
Post a Comment