如题

解决方案 »

  1.   

    To:  DanielYWoo(绿色毒汁) 因为用户说这样会大大提高她们的工作效率.(而且她们又很养眼,又对我展开美女外交,所以我只能拜倒在她们的石榴裙下了.)哈哈哈(开玩笑的)
    To:prok(好地都让猪拱了) 什么意思到底怎么做呀.有谁知道就请告诉小弟一下,拜托了.
      

  2.   

    那如果一个dialog里面
    有一个JTextArea包含一段文本,
    还有一个JButton会关闭程序,假定你当前焦点再JTextArea里,正在编辑第2行,你按下键,那应该是到第三行还是到button呢?
    这本身就违背了最基本的UI设计啊,现在大家都在向CUA靠拢,你这样....
      

  3.   

    请看KeyboardFocusManager类的setDefaultFocusTraversalKeys(int id, Set keystrokes)方法,API文档里有比较详细的说明。
      

  4.   

    mouselistener,
    碰到是上下键时,new mouseevent,
    然后用component.dispa...Eve方法
    相当于上下键事件变为了tab或者shilt +tab键事件
      

  5.   

    现在问题可以总结为:如何在swing里当用户按下enter键时相当于用户按下了Tab键.
    现在可以用以下方法实现:
    import javax.swing.*;
    import java.awt.*;
    import javax.swing.event.*;
    import java.awt.event.*;class F extends JFrame{
    JTextField a,b;
    JTextPane text;
    public F(){
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());
    a = new JTextField("one");
    b = new JTextField("two");
    a.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
    b.requestFocus(true);
    }
    });
    cp.add(a,BorderLayout.NORTH);
    cp.add(b,BorderLayout.CENTER);
    } public static void main(String[] args){
    F frame = new F();
    frame.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
    System.exit(0);
    }
    });
    frame.setSize(200,200);
    frame.setVisible(true);
    }
    }但这种方法的不好之处在于,如果用许多jTextField那真的要累死.
    请问谁有更好的方法实现相同的功能吗.
      

  6.   

    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.KeyboardFocusManager;
    import java.awt.event.KeyEvent;
    import java.util.HashSet;
    import java.util.Set;import javax.swing.*;public class FocusTraversalKeyTest
    {
    public static void main(String[] args)
    {
    JPanel p = new JPanel(new GridLayout(0, 3, 5, 5));
    for (int i = 0; i < 30; i++) {
    p.add(new JTextField(10));
    }

    Set forwardKeySet = new HashSet();
    forwardKeySet.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
    KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(
    KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, 
    forwardKeySet);

    Set backwardKeySet = new HashSet();
    backwardKeySet.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
    KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(
    KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, 
    backwardKeySet);// p.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, 
    // forwardKeySet);
    // p.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, 
    // backwardKeySet); JFrame f = new JFrame();
    f.getContentPane().add(p, BorderLayout.CENTER);
    f.getContentPane().add(new JLabel("使用上下箭头切换焦点"), BorderLayout.NORTH);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
    }
    }
    使用Enter键也可以,不过这样的话文本框就收不到actionPerformed事件了
      

  7.   

    謝謝gtlang78()的幫助.
    結貼