在文本框中输入的方式默认为插入形式,如何通过按键盘上的:Insert键,来切换插入和改写模式,谢谢各位

解决方案 »

  1.   

    public class InsertTextField extends JPanel { /**
     * @param args
     */
    public static void main(String[] args) {
    JFrame jf = new JFrame();
    jf.setContentPane(new InsertTextField());
    jf.pack();
    jf.setVisible(true);
    }
    public InsertTextField() {
    this.setLayout(new FlowLayout());
    final JTextField jtf = new JTextField(10);
    final IntegerDocument id = new IntegerDocument(10);
    jtf.addKeyListener(new KeyListener() {
    @Override
    public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_INSERT) {
    id.setFlag();
    }
    }
    @Override
    public void keyReleased(KeyEvent e) {
    // jtf.setCaretPosition(jtf.getText().length());
    } @Override
    public void keyTyped(KeyEvent e) { } });
    jtf.setDocument(id);
    this.add(jtf);
    } class IntegerDocument extends PlainDocument { private boolean flag = false; public IntegerDocument(int n) {
    super();
    } public void setFlag() {
    boolean f = flag ? flag = false : (flag = true);
    } public void insertString(int offset, String s, AttributeSet ats)
    throws BadLocationException { try {
    super.insertString(offset, s, ats);
    if (flag) {
    remove(offset - 1, 1);
    }
    } catch (Exception ex) {
    Toolkit.getDefaultToolkit().beep();
    }
    }
    }
    }可以结贴了
      

  2.   

    JDK好像没提供这件的方法,只能自己在监听事件中去处理了
      

  3.   

    Sprite_bei(http://www.blogjava.net/swing) 牛人啊,肯定是没测试就写出来了,太牛了,我还在想是否会有系统自带的,呵呵,太傻了。
    基本上可以了,就是还有一点点小问题,替换应该是替换掉光标所在的后面一个,然后再输入的时候,应该继续把后面的替换了,你的是一直替换同一个位置的,而且是替换光标前面那个字符了,请再帮我看看,这个东西吧,谢谢
      

  4.   

    Sprite_bei(http://www.blogjava.net/swing) 结贴前,再次感谢下,上面提到的问题我已经自己解决了,