三楼的朋友,你好。 以下我写了段测试程序,该程序在JDk1.6中可以实现我上述所说的功能,但同样这段程序在JDk1.7及以后的版本中就不能实现了,你可以试一下。 你说目前java的实现方案可以实现我所说的功能,能不能麻烦你写一下代码发出来学习学习,先感谢了。import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.*; public class A { public static void main(String[] args) { new A(); }
也能实现你说的那种需求啊!
以下我写了段测试程序,该程序在JDk1.6中可以实现我上述所说的功能,但同样这段程序在JDk1.7及以后的版本中就不能实现了,你可以试一下。
你说目前java的实现方案可以实现我所说的功能,能不能麻烦你写一下代码发出来学习学习,先感谢了。import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
public class A
{ public static void main(String[] args)
{
new A();
}
int count=10;//文本框1的字符数量控制
JFrame javaFrame=new JFrame("JAVA窗体");
JPanel javaZongPanel=new JPanel();
JTextField javaTextField1=new JTextField();
JTextField javaTextField2=new JTextField();
MyKeyListener myKeyListener=new MyKeyListener();
public A()
{
javaFrame.setBounds(200, 150, 500, 300);
javaTextField1.setBounds(20, 50, 400, 20);
javaTextField2.setBounds(20, 80, 400, 20);
javaFrame.setLayout(null);
javaTextField1.addKeyListener(myKeyListener);
javaFrame.add(javaTextField1);
javaFrame.add(javaTextField2); javaFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
javaFrame.setVisible(true);
}
class MyKeyListener implements KeyListener
{
int position=0;
String newStr=null;
public void keyReleased(KeyEvent e)
{
newStr=javaTextField1.getText();
if(newStr.length()>count)
{
position=javaTextField1.getCaretPosition();
javaTextField1.setText(newStr.substring(0, count));
javaTextField2.setText(newStr.substring(count, newStr.length())+javaTextField2.getText());
if(position>=count)
{
javaTextField2.requestFocus();
javaTextField2.setCaretPosition(position-count);
}
else
{
javaTextField1.setCaretPosition(position);
}
}
}
public void keyPressed(KeyEvent e)
{
} public void keyTyped(KeyEvent e)
{
}
}
}
另外你代码 写的也太乱了。import java.awt.event.InputMethodEvent;
import java.awt.event.InputMethodListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;import javax.swing.*;public class A {
int count = 10;//文本框1的字符数量控制
JFrame javaFrame = new JFrame("JAVA窗体");
JPanel javaZongPanel = new JPanel();
JTextField javaTextField1 = new JTextField();
JTextField javaTextField2 = new JTextField(); MyKeyListener myKeyListener = new MyKeyListener();
private boolean fromInputMethod = false; public A() {
javaFrame.setBounds(200, 150, 500, 300);
javaTextField1.setBounds(20, 50, 400, 20);
javaTextField2.setBounds(20, 80, 400, 20);
javaFrame.setLayout(null);
javaTextField1.addKeyListener(myKeyListener);
javaTextField1.addInputMethodListener(new InputMethodListener() {
@Override
public void inputMethodTextChanged(InputMethodEvent event) {
fromInputMethod = true;
}
@Override
public void caretPositionChanged(InputMethodEvent event) {
// do nothing
}
}); javaFrame.add(javaTextField1);
javaFrame.add(javaTextField2); javaFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
javaFrame.setVisible(true);
}
class MyKeyListener implements KeyListener {
int position = 0;
String newStr = null; public void keyReleased(KeyEvent e) {
if (32 == e.getKeyCode()) {
fromInputMethod = false;
}
if (fromInputMethod) return;
newStr = javaTextField1.getText();
if (newStr.length() > count) {
position = javaTextField1.getCaretPosition();
javaTextField1.setText(newStr.substring(0, count));
javaTextField2.setText(newStr.substring(count, newStr.length())+javaTextField2.getText());
if (position >= count) {
javaTextField2.requestFocus();
javaTextField2.setCaretPosition(position-count);
}else{
javaTextField1.setCaretPosition(position);
}
}
} public void keyPressed(KeyEvent e) {
} public void keyTyped(KeyEvent e) {
}
} public static void main(String[] args) {
new A();
}
}
你给的程序确实是实现了我说的功能,但是该程序存在一个弊端,就比如拿搜狗拼音输入法输入汉字来说吧,当输入汉字的时候,确定输入时不用空格键,而是用鼠标左键点击的方式做输入确定,则此时第一个文本框内多出的字符并不会被放入到第二个文本框,并且此时的光标会继续在第一个文本框内,如果此时用ctrl+shift方式将输入法切换到英文输入时,则此时在第一个文本内输入再多的字母或数字或其它非空格的字符,程序都不会截掉第一个文本框内多余的字符(只要不按空格键)。
个人觉得这种将拼音放入输入控件内的做法有些多余(这或许是我个人认知能力有限,没能看到它的好处),而且这种形式在某些特定情况下也给写程序的人带来了不必要的麻烦。
另外,程序是直接贴进来的,提交上去之后程序里的除了回车之外的其它所有段前段后的空白字符都被过滤掉了,所以程序显得有些乱,不过同样谢谢你的提醒。