| 发表于:2008-01-23 18:52:362楼 得分:0 |
下面是我的editor的code: import java.awt.component; import java.awt.event.actionevent; import java.awt.event.focusevent; import java.awt.event.focuslistener; import java.awt.event.keyadapter; import java.awt.event.keyevent; import java.awt.event.mouseevent; import java.text.numberformat; import java.text.parseexception; import java.util.eventobject; import javax.swing.abstractaction; import javax.swing.action; import javax.swing.defaultcelleditor; import javax.swing.inputmap; import javax.swing.jcomponent; import javax.swing.jformattedtextfield; import javax.swing.jspinner; import javax.swing.jspinner.defaulteditor; import javax.swing.jtable; import javax.swing.jtextfield; import javax.swing.keystroke; import javax.swing.spinnernumbermodel; import javax.swing.event.changeevent; import javax.swing.event.changelistener; import javax.swing.event.documentevent; import javax.swing.event.documentlistener; import javax.swing.text.defaultformatterfactory; import javax.swing.text.numberformatter; public class spinnercelleditor extends defaultcelleditor{ protected jtable table; protected spinnertablemodel tablemodel; private integer minimum; private integer maximum; private jformattedtextfield ftf; private numberformat integerformat; public spinnercelleditor(jtable table) { super(new jtextfield()); setclickcounttostart(0); this.table = table; tablemodel = (spinnertablemodel)table.getmodel(); tableteyactiondefinition(); // keystroke up = keystroke.getkeystroke(keyevent.vk_up, 0); // im.put(up, "none"); keystroke down = keystroke.getkeystroke(keyevent.vk_down, 0); // im.put(down, "none"); spinnernumbermodel tmodel = new spinnernumbermodel(new integer(0), 0, null,1); editorcomponent = new jspinner(tmodel); createjspinnerdelegate(); } public component gettablecelleditorcomponent(jtable table, object value, boolean isselected, int row, int column) { //categorytable.setfocustraversalkeysenabled(false); minimum = 0; maximum = integer.max_value; ((jspinner)editorcomponent).setmodel(new spinnernumbermodel((integer)(value), minimum, maximum, new integer(1))); settextfieldproperty(); if (value != null && value.equals("")) { ((jspinner)editorcomponent).getmodel().setvalue((integer)value); ftf.setvalue(value); } if (isselected) { system.out.printf("\n%s",ftf.gettext()); //ftf.selectall(); //ftf.requestfocusinwindow(); //table.editcellat(row, column); //editorcomponent.requestfocusinwindow(); //table.geteditorcomponent().requestfocusinwindow(); } return editorcomponent; } private void settextfieldproperty() { ftf = ((jspinner.defaulteditor)((jspinner)editorcomponent).geteditor()).gettextfield(); //set up the editor for the integer cells. integerformat = numberformat.getintegerinstance(); numberformatter intformatter = new numberformatter(integerformat); intformatter.setformat(integerformat); intformatter.setminimum(minimum); intformatter.setmaximum(maximum); ftf.setformatterfactory( new defaultformatterfactory(intformatter)); //ftf.setvalue(minimum); ftf.sethorizontalalignment(jtextfield.trailing); ftf.setfocuslostbehavior(jformattedtextfield.commit_or_revert); ftf.addfocuslistener(new focuslistener() { public void focusgained(focusevent e) { } public void focuslost(focusevent e) { if (ftf.gettext() != null && !ftf.gettext().equals("")) ((jspinner)editorcomponent).setvalue(integer.parseint(ftf.gettext())); } }); //ftf.setfocustraversalkeysenabled(false); // only allow the input of numbers ftf.addkeylistener(new keyadapter() { public void keytyped(keyevent e){ char c = e.getkeychar(); if(character.isdigit(c) ¦ ¦ c==keyevent.vk_back_space ¦ ¦ c==keyevent.vk_delete) { system.out.printf("\n%s\n", ftf.gettext().tostring()); // if (ftf.gettext() != null && !ftf.gettext().equals("")) // ((jspinner)editorcomponent).setvalue(integer.parseint(ftf.gettext())); return; } e.consume(); } public void keypressed(keyevent e){ if(e.iscontroldown()) e.consume(); } }); //react when the user presses enter while the editor is //active. (tab is handled as specified by //jformattedtextfield's focuslostbehavior property.) ftf.getinputmap().put(keystroke.getkeystroke( keyevent.vk_tab, 0), "check"); ftf.getactionmap().put("check", new abstractaction() { public void actionperformed(actionevent e) { if (!ftf.iseditvalid()) { //the text is invalid. // ((jspinner)editorcomponent).getmodel().setvalue(((integer)ftf.gettext())); ftf.postactionevent(); //inform the editor } else { try { //the text is valid, ftf.commitedit(); //so use it. ftf.postactionevent(); //stop editing } catch (java.text.parseexception exc) { } } } }); } | | |
|