博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类 FocusTraversalPolicy 的使用方法
阅读量:4130 次
发布时间:2019-05-25

本文共 8736 字,大约阅读时间需要 29 分钟。

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(37, 30));            jTextField.setSize(new Dimension(200, 22));            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(37, 60, 200, 22));            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(37, 90, 200, 22));            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(37, 120, 200, 22));            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(37, 150, 200, 22));            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(255, 30, 200, 22));            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(255, 60, 200, 22));            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(255, 90, 200, 22));            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(255, 120, 200, 22));            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(255, 150, 200, 22));            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(491, 259);        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
order = new Vector
(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
order; public MyOwnFocusTraversalPolicy(Vector
order) { this.order = new Vector
(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】键循环遍历所有文本框。

转载地址:http://ffbvi.baihongyu.com/

你可能感兴趣的文章
laravel事务
查看>>
springcloud 连续请求 500
查看>>
vue复用新增和编辑表单
查看>>
Ubuntu 16.04 apt-get更换为国内阿里云源
查看>>
laravel部署到宝塔步骤
查看>>
小程序获取access_token
查看>>
navicat远程连接mysql数据库
查看>>
tp5令牌数据无效 解决方法
查看>>
自己的网站与UCenter整合(大致流程)
查看>>
laravel 制作通用的curd 后台操作
查看>>
【小红书2017年笔试】求一个数组中平均数最大的子数组
查看>>
Linux基础系列-定时器与时间管理
查看>>
Linux基础系列-可执行程序的产生过程
查看>>
Linux基础系列-Kernel 初始化宏
查看>>
Linux子系统系列-I2C
查看>>
<iOS>关于自定义description的一点用法
查看>>
Unix 命令,常用到的
查看>>
DLL中建立进程共享数据段需要注意的语法问题
查看>>
服务器端技术----Http请求的处理过程
查看>>
C语言-预处理指令2-条件编译
查看>>