zoukankan      html  css  js  c++  java
  • 类 FocusTraversalPolicy 的使用方法

    官方说明:

    FocusTraversalPolicy 定义一种顺序,按此顺序遍历具有特定焦点循环根的 Component。实例可以将此策略应用于任意焦点循环根,允许它们在整个 Container 共享。当焦点循环根的组件层次结构更改时,不必重新初始化它们。

    FocusTraversalPolicy 的核心职责是提供算法,在 UI 中进行向前或向后遍历时确定下一个和上一个要聚焦的 Component。每个 FocusTraversalPolicy 还必须提供算法,确定遍历循环中第一个、最后一个,以及默认的组件。进行正常的正向和反向遍历时,分别使用第一个和最后一个 Component。默认的 Component 是向下遍历到一个新的焦点遍历循环时接收焦点的第一个 Component。FocusTraversalPolicy 可以随意提供确定窗口初始 Component 的算法。初始 Component 是首次将窗口设置为可见时接收焦点的第一个 Component。

    import javax.swing.*;
    import java.awt.
    *;
    import java.util.
    *;
    import java.awt.
    event.*;

    public class MainFrame extends JFrame {

        
    private static final long serialVersionUID = 1L;
        
    private JPanel jContentPane = null;
        
    private JTextField jTextField = null;
        
    private JTextField jTextField1 = null;
        
    private JTextField jTextField2 = null;
        
    private JTextField jTextField3 = null;
        
    private JTextField jTextField4 = null;
        
    private JTextField jTextField5 = null;
        
    private JTextField jTextField6 = null;
        
    private JTextField jTextField7 = null;
        
    private JTextField jTextField8 = null;
        
    private JTextField jTextField9 = null;
        
    static MyOwnFocusTraversalPolicy newPolicy;

        
    /**
         * This method initializes jTextField    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField() {
            
    if (jTextField == null) {
                jTextField 
    = new JTextField();
                jTextField.setLocation(
    new Point(3730));
                jTextField.setSize(
    new Dimension(20022));
                jTextField.addActionListener(
    new MyActionListener());
            }
            
    return jTextField;
        }

        
    /**
         * This method initializes jTextField1    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField1() {
            
    if (jTextField1 == null) {
                jTextField1 
    = new JTextField();
                jTextField1.setBounds(
    new Rectangle(376020022));
                jTextField1.addActionListener(
    new MyActionListener());
            }
            
    return jTextField1;
        }

        
    /**
         * This method initializes jTextField2    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField2() {
            
    if (jTextField2 == null) {
                jTextField2 
    = new JTextField();
                jTextField2.setBounds(
    new Rectangle(379020022));
                jTextField2.addActionListener(
    new MyActionListener());
            }
            
    return jTextField2;
        }

        
    /**
         * This method initializes jTextField3    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField3() {
            
    if (jTextField3 == null) {
                jTextField3 
    = new JTextField();
                jTextField3.setBounds(
    new Rectangle(3712020022));
                jTextField3.addActionListener(
    new MyActionListener());
            }
            
    return jTextField3;
        }

        
    /**
         * This method initializes jTextField4    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField4() {
            
    if (jTextField4 == null) {
                jTextField4 
    = new JTextField();
                jTextField4.setBounds(
    new Rectangle(3715020022));
                jTextField4.addActionListener(
    new MyActionListener());
            }
            
    return jTextField4;
        }

        
    /**
         * This method initializes jTextField5    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField5() {
            
    if (jTextField5 == null) {
                jTextField5 
    = new JTextField();
                jTextField5.setBounds(
    new Rectangle(2553020022));
                jTextField5.addActionListener(
    new MyActionListener());
            }
            
    return jTextField5;
        }

        
    /**
         * This method initializes jTextField6    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField6() {
            
    if (jTextField6 == null) {
                jTextField6 
    = new JTextField();
                jTextField6.setBounds(
    new Rectangle(2556020022));
                jTextField6.addActionListener(
    new MyActionListener());
            }
            
    return jTextField6;
        }

        
    /**
         * This method initializes jTextField7    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField7() {
            
    if (jTextField7 == null) {
                jTextField7 
    = new JTextField();
                jTextField7.setBounds(
    new Rectangle(2559020022));
                jTextField7.addActionListener(
    new MyActionListener());
            }
            
    return jTextField7;
        }

        
    /**
         * This method initializes jTextField8    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField8() {
            
    if (jTextField8 == null) {
                jTextField8 
    = new JTextField();
                jTextField8.setBounds(
    new Rectangle(25512020022));
                jTextField8.addActionListener(
    new MyActionListener());
            }
            
    return jTextField8;
        }

        
    /**
         * This method initializes jTextField9    
         *     
         * @return javax.swing.JTextField    
         
    */
        
    private JTextField getJTextField9() {
            
    if (jTextField9 == null) {
                jTextField9 
    = new JTextField();
                jTextField9.setBounds(
    new Rectangle(25515020022));
                jTextField9.addActionListener(
    new MyActionListener());
            }
            
    return jTextField9;
        }

        
    /**
         * @param args
         
    */
        
    public static void main(String[] args) {
            SwingUtilities.invokeLater(
    new Runnable() {
                
    public void run() {
                    MainFrame thisClass 
    = new MainFrame();
                    thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    thisClass.setVisible(
    true);
                    thisClass.setFocusTraversalPolicy(newPolicy);
                }
            });
        }

        
    /**
         * This is the default constructor
         
    */
        
    public MainFrame() {
            super();
            initialize();
        }

        
    /**
         * This method initializes this
         * 
         * @return void
         
    */
        
    private void initialize() {
            
    this.setSize(491259);
            
    this.setContentPane(getJContentPane());
            
    this.setTitle("JFrame");
        }

        
    /**
         * This method initializes jContentPane
         * 
         * @return javax.swing.JPanel
         
    */
        
    private JPanel getJContentPane() {
            
    if (jContentPane == null) {
                jContentPane 
    = new JPanel();
                jContentPane.setLayout(
    null);
                jContentPane.add(getJTextField(), 
    null);
                jContentPane.add(getJTextField1(), 
    null);
                jContentPane.add(getJTextField2(), 
    null);
                jContentPane.add(getJTextField3(), 
    null);
                jContentPane.add(getJTextField4(), 
    null);
                jContentPane.add(getJTextField5(), 
    null);
                jContentPane.add(getJTextField6(), 
    null);
                jContentPane.add(getJTextField7(), 
    null);
                jContentPane.add(getJTextField8(), 
    null);
                jContentPane.add(getJTextField9(), 
    null);
                Vector
    <Component> order = new Vector<Component>(10);
                order.add(getJTextField());
                order.add(getJTextField1());
                order.add(getJTextField2());
                order.add(getJTextField3());
                order.add(getJTextField4());
                order.add(getJTextField5());
                order.add(getJTextField6());
                order.add(getJTextField7());
                order.add(getJTextField8());
                order.add(getJTextField9());
                newPolicy 
    = new MyOwnFocusTraversalPolicy(order);
            }
            
    return jContentPane;
        }

        
    class MyActionListener implements ActionListener { // 所有文本框都加入此ActionListener
            public void actionPerformed(ActionEvent e) {
                ((JTextField) e.getSource()).transferFocus();
    // 按【Enter】键,focus往下一个组件
            }
        }

        
        
    //内置类,实现TAB按照指定规则设置
        public static class MyOwnFocusTraversalPolicy extends FocusTraversalPolicy {
            Vector
    <Component> order;

            
    public MyOwnFocusTraversalPolicy(Vector<Component> order) {
                
    this.order = new Vector<Component>(order.size());
                
    this.order.addAll(order);
            }

            
    public Component getComponentAfter(Container focusCycleRoot,
                    Component aComponent) {
                
    int idx = (order.indexOf(aComponent) + 1% order.size();
                
    return order.get(idx);
            }

            
    public Component getComponentBefore(Container focusCycleRoot,
                    Component aComponent) {
                
    int idx = order.indexOf(aComponent) - 1;
                
    if (idx < 0) {
                    idx 
    = order.size() - 1;
                }
                
    return order.get(idx);
            }

            
    public Component getDefaultComponent(Container focusCycleRoot) {
                
    return order.get(0);
            }

            
    public Component getLastComponent(Container focusCycleRoot) {
                
    return order.lastElement();
            }

            
    public Component getFirstComponent(Container focusCycleRoot) {
                
    return order.get(0);
            }
        }
    }  

    本程序还可以实现按键盘【Enter】键循环遍历所有文本框。

  • 相关阅读:
    【Linux编程基础】构建Linux 库文件
    【Linux调试技术】查看数据
    【C++学习】复制构造函数和赋值运算符根本的不同
    【C++学习】显式构造函数
    【C++学习】函数对象和Lambda表达式
    【C++学习】类初始化列表的分析总结
    【Linux开发基础】Linux守护服务进程(Daemon service)编程
    【编程小结】C++和Java 的缺省初始化问题
    SQL查询金额去掉小数点后面的零
    SQL自定义函数split 将数组(分隔字符串)返回阵列(表)
  • 原文地址:https://www.cnblogs.com/qixin622/p/1520223.html
Copyright © 2011-2022 走看看