就是在选中JButton时,按下Tab键,能够光标跳到指定的控件就是要实现这个功能

解决方案 »

  1.   

    btnOK.setNextFocusableComponent(btnCancel);
    通过此方法设置下一个要跳到哪个控件!!
      

  2.   

    不需要事件监听?
    对于JTextField同样可以吗?
      

  3.   

    可以实现了
    但在编译时,提示说是个不推荐的API方法有没有可以实现的其他方法,而且不是 : 不推荐的API方法
      

  4.   

    我想原因是这样的,Table不是一个普通的Key,Java底层会优先处理Table键,而不是当做Key传给Button,但是Java也有相应的处理机制,就是FocusEvent。这里我给出一个FocusEvent的演示,可以在cancelBtn gain focus时,选择button3 request focus,当然request并不一定能够满足,详情请查看JDK文档
    // TableTest// import Java packages
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class TableTest{
        public static void main( String[] args ) {
            JFrame f = new JFrame( "Table Key Test" );        JButton button1 = new JButton( "button 1" );        JButton button2 = new JButton( "button 2" );        final JButton button3 = new JButton( "button 3" );        button3.addFocusListener(
                new FocusListener() {
                    public void focusGained( FocusEvent e ) {
                        System.out.println( "button3 focused" );
                    }                public void focusLost( FocusEvent e ) {
                        System.out.println( "button3 lost focus" );
                    }
                }
            );        JButton _cancelBtn = new JButton( "Button" );        _cancelBtn.addKeyListener(
                new java.awt.event.KeyAdapter() {
                    public void keyPressed( KeyEvent e ) {
                        System.out.println( e.getKeyCode() );
                    }
            });        _cancelBtn.addFocusListener(
                new FocusListener() {
                    public void focusGained( FocusEvent e ) {
                        System.out.println( "cancel button focused" );
                        button3.requestFocus();
                    }                public void focusLost( FocusEvent e ) {
                        System.out.println( "cancel button lost focus" );
                    }
                }
            );        Container container = f.getContentPane();
            container.setLayout( new FlowLayout() );
            container.add( button1 );
            container.add( _cancelBtn );
            container.add( button2 );
            container.add( button3 );        f.setSize( 300, 200 );
            f.show();        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );    }
    }   // END class
      

  5.   

    Top  
     
     回复人: cuizm(射天狼) ( ) 信誉:100  2004-09-13 12:09:00  得分: 0  
     
     
       btnOK.setNextFocusableComponent(btnCancel);
    通过此方法设置下一个要跳到哪个控件!!
      
     
    Top  
     
     回复人: cuizm(射天狼) ( ) 信誉:100  2004-09-13 12:09:00  得分: 0  
     
     
       你这方法根本不行~~~
      
     
    Top  
     
    怀疑
      

  6.   

    To :  iwantiten(iwantit) 你的source 看一下,我的理解是通过监听获取焦点 addFocusListener的方法里面
    通过 button3.requestFocus()实现问题是,如果按Tab,可能没有问题,但如果通过鼠标点到其他地方,也会出现跑到了button3上面的问题
      

  7.   

    我对iwantiten(iwantit) 的代码做如下修改,你看看!
    // import Java packages
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class TableTest{
    public static void main( String[] args ) {
    JFrame f = new JFrame( "Table Key Test" ); JButton button1 = new JButton( "button 1" ); JButton button2 = new JButton( "button 2" );

    final JButton _cancelBtn = new JButton( "Button" );
    final JButton button3 = new JButton( "button 3" ); button3.addFocusListener(
    new FocusListener() {
    public void focusGained( FocusEvent e ) {
    System.out.println( "button3 focused" );
    } public void focusLost( FocusEvent e ) {
    System.out.println( "button3 lost focus" );
    }
    }
    );
    _cancelBtn.addKeyListener(
    new java.awt.event.KeyAdapter() {
    public void keyPressed( KeyEvent e ) {
    System.out.println( "fjkgkf"+e.getKeyCode() );
    }
    }); _cancelBtn.addFocusListener(
    new FocusListener() {
    public void focusGained( FocusEvent e ) {
    System.out.println( "cancel button focused" );
    _cancelBtn.setNextFocusableComponent(button3);
    //button3.requestFocus();
    } public void focusLost( FocusEvent e ) {
    System.out.println( "cancel button lost focus" );
    }
    }
    ); Container container = f.getContentPane();
    container.setLayout( new FlowLayout() );
    container.add( button1 );
    container.add( _cancelBtn );
    container.add( button2 );
    container.add( button3 ); f.setSize( 300, 200 );
    f.show(); f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); }
    }
      

  8.   

    To  :  hpy121(孩子)首先thx,对于 _cancelBtn.setNextFocusableComponent(button3);
    我已经尝试过了,可以实现功能,而且不需要通过添加事件但问题是编译的时候提示该方法为 不推荐的API方法, 
    就这一点,所以想看看还有没有其他方法
      

  9.   

    通过 设置JTextField的focus属性可以实现了,_txt.setFocusable(false);