public class TextDemo { public static void main(String[] args) { jFrameShow(); }

private static void jFrameShow() {

JFrame jframe = new JFrame();
jframe.setLayout(null);
jframe.setBounds(30,30,805, 625);
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
swingText = new JTextField();
swingText.setBounds(50,50,100,20);
swingText.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) {

swingText.setText("");
//swingText.setText(String.valueOf(e.getKeyChar()));
}
});
jframe.add(swingText);
jframe.setVisible(true);
}
}如上代码,本来意图是想按下任意健都通过keyPressed事件加以重新解析,重设swingText的内容,
可是,swingText.setText(String.valueOf(e.getKeyChar()));这行如果执行的话,最后的结果是
swingText出现两个相同的值,如aa,bb等
而选择swingText.setText("");有效时,最终又不能如预期的清空swingText的内容。请问有何解决办法吗,keyReleased事件就不用考虑了,因为是按键释放才触动的,用户体验不是很好

解决方案 »

  1.   

    swingText.setText(String.valueOf(e.getKeyChar()));这行如果执行的话,最后的结果是
    swingText出现两个相同的值,如aa,bb等 
    因为swingText自带其他监听public class TextDemo {
    private static JTextField swingText; public static void main(String[] args) { jFrameShow(); } private static void jFrameShow() { JFrame jframe = new JFrame();
    jframe.setLayout(null);
    jframe.setBounds(30, 30, 805, 625);
    jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    swingText = new JTextField();
    swingText.setBounds(50, 50, 100, 20);
    swingText.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent e) { swingText.setText("");
    // swingText.setText(String.valueOf(e.getKeyChar()));
    }
    });
    jframe.add(swingText);
    jframe.setVisible(true);
    }
    }
    你要什么效果?
      

  2.   

    比如说,按下a,swingText就出现一个a,而不是两个,因为实际需求更加复杂,
    所以必须解析所按的键,但不能让按下的键的值显示在swingText中
      

  3.   


    swingText.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) {
    e.consume();//让按下的键不显示
    } public void keyPressed(KeyEvent e) { swingText.setText("bb");//你自己解析

    }
    });
    这样应该可以,你试试。
      

  4.   

    感谢3楼的帮忙,但这种方式并不能屏蔽ctrl+a,ctrl+v等快捷键
    尤其是ctrl+v会带来很大的麻烦,至于这方面有什么好方法吗