这是以前给别人做的例子,requestFocus();要加在frame.setVisible(true);的后面才能生效import javax.swing.*;public class Test{
  JFrame frame;
  JPanel pane;
  JTextField t1, t2, t3;
  public Test() {
    t1 = new JTextField(20);
    t2 = new JTextField(20);
    t3 = new JTextField(20);
    frame = new JFrame("");
    pane = new JPanel();
    frame.getContentPane().add(pane);
    pane.add(t1);
    pane.add(t2);
    pane.add(t3);
    frame.setSize(300, 200);
    frame.setVisible(true);
    //t1.requestFocus();//第一个得到光标的焦点,这个是默认的
    //t2.requestFocus();//第二个得到光标的焦点
    t3.requestFocus(); //第三个得到光标的焦点  }  public static void main(String[] args) {
    Test test = new Test();
  }
}
<------ 树欲静而风不止 ------>

解决方案 »

  1.   

    第一个问题:
        楼上所说
    第二个问题:
        回车后,你是想要光标去下一行吗?如果是,那可不行,TextField是单行文本框,多行文本用TextArea
      

  2.   

    第二个问题也写出来了:import javax.swing.*;
    import java.awt.event.*;public class Test{
      JFrame frame;
      JPanel pane;
      JTextField t1, t2, t3;
      public Test() {
        t1 = new JTextField(20);
        t2 = new JTextField(20);
        t3 = new JTextField(20);
        t1.addKeyListener(new KeyListener() {
          public void keyTyped(KeyEvent keyEvent) {
            if((int)keyEvent.getKeyChar()==10){
              t2.requestFocus();
            }
          }
          public void keyPressed(KeyEvent keyEvent) {}
          public void keyReleased(KeyEvent keyEvent) {}
        });
        t2.addKeyListener(new KeyListener() {
          public void keyTyped(KeyEvent keyEvent) {
            if((int)keyEvent.getKeyChar()==10){
              t3.requestFocus();
            }
          }
          public void keyPressed(KeyEvent keyEvent) {}
          public void keyReleased(KeyEvent keyEvent) {}
        });
        frame = new JFrame("");
        pane = new JPanel();
        frame.getContentPane().add(pane);
        pane.add(t1);
        pane.add(t2);
        pane.add(t3);
        frame.setSize(300, 200);
        frame.setVisible(true);
        t1.requestFocus();//第一个得到光标的焦点,这个是默认的
        //t2.requestFocus();//第二个得到光标的焦点
        //t3.requestFocus(); //第三个得到光标的焦点
      }  public static void main(String[] args) {
        Test test = new Test();
      }
    }<------ 树欲静而风不止 ------>
      

  3.   

    问题2,可以获得JTextField的actionmap,将回车对应的事件响应修改.
      

  4.   

    mq612(理想) 谢谢,太谢谢了。我这就给分!
    不过还可以在请教点问题吗?
    如果不是固定的指定是t1,t2,t3得光标,而是想实现让光标跳转到一个可以得光标的控件上,能不能实现呢?比如做专门负责光标跳转的小函数?不好意思。
      

  5.   

    如果是跳转到下个空间,你可以将所有控件都加入list,然后利用.next指向下一个,转型后就可以向上面的例子那样了,此外,listener还可以实现公用
      

  6.   

    公用,是说把listener单独做成一个Class吗?
      

  7.   

    现在这样也不麻烦啊,不过你喜欢的话也可以写一个方法,把需要得到光标的组件当做参数传递过去就可以了。例:
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.Component;public class Test{
      JFrame frame;
      JPanel pane;
      JTextField t1, t2, t3;
      JButton button;
      public Test() {
        button = new JButton("确定");
        t1 = new JTextField(20);
        t2 = new JTextField(20);
        t3 = new JTextField(20);
        t1.addKeyListener(new KeyListener() {
          public void keyTyped(KeyEvent keyEvent) {
            if((int)keyEvent.getKeyChar()==10){
              setCFocus(t2);
            }
          }
          public void keyPressed(KeyEvent keyEvent) {}
          public void keyReleased(KeyEvent keyEvent) {}
        });
        t2.addKeyListener(new KeyListener() {
          public void keyTyped(KeyEvent keyEvent) {
            if((int)keyEvent.getKeyChar()==10){
              setCFocus(t3);
            }
          }
          public void keyPressed(KeyEvent keyEvent) {}
          public void keyReleased(KeyEvent keyEvent) {}
        });
        t3.addKeyListener(new KeyListener() {
          public void keyTyped(KeyEvent keyEvent) {
            if((int)keyEvent.getKeyChar()==10){
              setCFocus(button);
            }
          }
          public void keyPressed(KeyEvent keyEvent) {}
          public void keyReleased(KeyEvent keyEvent) {}
        });
        frame = new JFrame("");
        pane = new JPanel();
        frame.getContentPane().add(pane);
        pane.add(t1);
        pane.add(t2);
        pane.add(t3);
        pane.add(button);
        frame.setSize(300, 200);
        frame.setVisible(true);
        t1.requestFocus();//第一个得到光标的焦点,这个是默认的
        //t2.requestFocus();//第二个得到光标的焦点
        //t3.requestFocus(); //第三个得到光标的焦点
      }  public void setCFocus(Component c){
        c.requestFocus();
      }  public static void main(String[] args) {
        Test test = new Test();
      }
    }<------ 树欲静而风不止 ------>
      

  8.   

    我稍微改了一下,用的是
    keyEvent. getComponent().transferFocus();
    好想也还可以的样子。
    呵呵。不知道这样做是不是会有什么不好呢?