精华内容
下载资源
问答
  • 回车键按下时,自动以Tab键方式在文本输入框之间进行焦点切换的JavaScript代码
  •  在使用 JQuery EasyUI 各表单组件时,实际客户端页面元素是由 JQuery EasyUI 生成的,元素的焦点切换,虽然 Tab 键可以正常用,但顺序控制属性 tabindex 不起作用,因为页面看到的元素,是生成的,没有...
  • 焦点切换问题

    2020-11-30 23:16:39
    <div><p>当窗口中同时含有button和edit两种控件的时候,用四方向键切换焦点,一旦焦点进入到edit后就再也切换不出来了</p><p>该提问来源于开源项目:zlgopen/awtk</p></div>
  • android按钮被选点击得到焦点失去焦点切换图片
  • 本文实例为大家分享了Qt实现进程界面之间鼠标焦点切换的具体代码,供大家参考,具体内容如下 需求 有三个软件A、B、C。A是主要软件,B、C是辅助软件。 ⑴ 在使用A的过程中,按N键可以呼出软件B,按M键可以呼出软件C...
  • qt按键焦点切换

    千次阅读 2015-06-03 13:00:26
    1.实现焦点切换功能 使用事件过滤器来对事件进行分类处理这样就可以在a1至a4等控件上实现,按下右键后即把焦点转到右边控件上的功能。 先在aa.h中加入 public slots: booleventFilter(QObject *,QEvent *); 在aa.cpp...

    实现内容

    对于4个控件,当按下左右按键时焦点可以左右切换,如下图:


    关键代码

    1.实现焦点切换功能

    使用事件过滤器来对事件进行分类处理这样就可以在a1至a4等控件上实现,按下右键后即把焦点转到右边控件上的功能。

    先在aa.h中加入

    public slots:

    booleventFilter(QObject *,QEvent *);

    在aa.cpp中定义函数

    bool aa::eventFilter(QObject *watched, QEvent*event)

    {

       if(watched == ui->a1 || watched == ui->a2 || watched == ui->a3|| watched == ui->a4)//确认可控的控件

        {

           if(event->type() == QEvent::KeyPress)//如果检测到按键

             {

                  bool  f1 =ui->a1->hasFocus();

                  bool  f2 =ui->a2->hasFocus();

                  bool  f3 =ui->a3->hasFocus();

                  bool  f4 =ui->a4->hasFocus();定义4个获得焦点的状态

               QKeyEvent *key_event = static_cast<QKeyEvent *>(event); //将事件转化为键盘事件

                 if(key_event->key() == Qt::Key_Right)//右键

                 {

                     if(f1)//焦点在a1

                    {

                       focusNextChild();//焦点移动

                    ui->a2->setFocus();//移动到a2

                    }

                     if(f2)

                   {

                       focusNextChild();

                    ui->a3->setFocus();

                    }

                     if(f3)

                    {

                       focusNextChild();

                    ui->a4->setFocus();

                    }

                 }

                 if(key_event->key() == Qt::Key_Left)

                 {

                     if(f4)

                    {

                       focusNextChild();

                    ui->a3->setFocus();

                    }

                     if(f3)

                    {

                      focusNextChild();

                    ui->a2->setFocus();

                    }

                     if(f2)

                    {

                       focusNextChild();

                    ui->a1->setFocus();

                    }

                 }

           }

    }

    return QWidget::eventFilter(watched,event);     //最后将事件交给上层对话框

    }

    左键功能定义稍加修改即可

     

    2.实现动态焦点背景色变化功能

    if (watched==ui->a1)         //

         {

             if (event->type()==QEvent::FocusIn)     //然后再判断控件的具体事件(这里指获得焦点事件)

             {

                 QPalette p=QPalette();

                 p.setColor(QPalette::Button,Qt::yellow);

                 ui->a1->setPalette(p);

             }

    另一种实现方法

    另外一般的焦点切换还可以使用setCurrentItem函数实现,下面是在网上看到的代码:

    bool MainForm::eventFilter(QObject *obj,QEvent *event)

    {

             if(obj==ComboBox_Keyboard){       

                       if(event->type()== QEvent::KeyPress)

                       {

                                QKeyEvent*keyEvent = static_cast<QKeyEvent*>(event);

                                if(keyEvent->key()== 4100)//ENTER

                                         on_ComboBox_Keyboard(ComboBox_Keyboard->currentItem());

                                if(keyEvent->key()== 4117){//DOWN

                                         if(ComboBox_Keyboard->currentItem()==ComboBox_Keyboard->count()-1)

                                                   ComboBox_Keyboard->setCurrentItem(0);

                                         else

                                                   ComboBox_Keyboard->setCurrentItem(ComboBox_Keyboard->currentItem()+1);}

                                if(keyEvent->key()== 4115){//UP

                                         if(ComboBox_Keyboard->currentItem()==0)

                                                   ComboBox_Keyboard->setCurrentItem(ComboBox_Keyboard->count()-1);

                                         else

                                                   ComboBox_Keyboard->setCurrentItem(ComboBox_Keyboard->currentItem()-1);}

                                returnTRUE;            

                       }else{

                                returnFALSE;

                       }

             }

    …………

    }

     

    参考资料:

    http://zoreraul.blog.163.com/blog/static/725739282010828104621410/

    http://zhidao.baidu.com/link?url=4DCT55CnwXzT1nC28f0oPb36rrlK7bp0eohV61gtlZY0IvzLucMRqMvIjNHq4Oc5_horjUhyDkeSy0A1VYW7hK

    展开全文
  • 基于Jquery的回车成tab焦点切换效果代码(Enter To Tab ),需要的朋友可以参考下。
  • 安卓TimePicker通过按键事件与其他控件进行焦点切换
  • Mac多屏下焦点切换

    万次阅读 2017-04-03 15:43:25
    Mac多显示器之间的焦点切换 http://xuquan.me/blog/switch-multi-display.html 多显示器之间的焦点切换非常麻烦,每次码代码时需要切换到浏览器查资料都需要用鼠标点外接的显示器,需要切换回来写代码时...


    Mac多显示器之间的焦点切换

    http://xuquan.me/blog/switch-multi-display.html


    多显示器之间的焦点切换非常麻烦,每次码代码时需要切换到浏览器查资料都需要用鼠标点外接的显示器,需要切换回来写代码时又要用鼠标点回来,作为一名高效(搞笑)的键盘党,这能忍???

    于是速度网上查找攻略,果然找到完美解决办法,如下:

    1. 首先需要到网上搜索并下载Mac上的鼠标点击程序Cliclick
    2. 接着便是使用神器Automator的时刻了,点击打开程序Automator,选择服务, 接下来的步骤如下图:写好脚本执行后,需要把脚本保存下来,可以自己命名,我的为选择屏幕1
    3. 接下来就是设置快捷键了,打开系统偏好设置-键盘-快捷键-服务-通用,可以看到自己之前保存的脚本,设置快捷键即可:
    4. 按照同样的方法再设置选择屏幕2即可

    原理: 每次按对应的快捷键,就是在你设置的坐标位置上程序执行点击鼠标的操作,这样就实现了切换屏幕焦点的作用,awesome!!!


    展开全文
  • JTable通过左右方向键实现焦点切换 public class Sample { private JFrame frame; private JPanel panel; private JTable table; public Sample() { initComponents(); } public void initComponents...

    自己想通过方向键控制JTable的焦点移动,最初是通过keyListener,但是却发现只能实现上下的焦点切换,在单元格处于编辑状态时使用左右方向键时根本无法触发监听事件,也就无法实现焦点切换,国内外关于swing的资料都太少了,自己研究了一下国外一个博主提供的代码,然后搜索了一下源码关键词,实现了左右方向键控制焦点的移动。具体原理没有深入研究,希望对需要的同行有所帮助,同样也希望原理的留言告知,谢谢。

    
    public class Sample {
    
        private JFrame frame;
        private JPanel panel;
        private JTable table;
    
        public Sample() {
    
            initComponents();
        }
    
        public void initComponents() {
    
            frame = new JFrame();
            panel = new JPanel();
            table = new JTable(50, 5);
            registerTableActionMap();
            table.setColumnSelectionAllowed(true);
            table.setPreferredSize(new Dimension(400, 400));
            panel.add(table);
    
            frame.getContentPane().add(panel);
            frame.setSize(400, 400);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    
        /**
         * 注册表格的ActionMap
         */
        private void registerTableActionMap(){
            final Action leftAction = table.getActionMap().get("selectPreviousColumn");
            table.getActionMap().put("selectPreviousColumn", new AbstractAction() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    leftAction.actionPerformed(e);
                    int selRow = table.getSelectedRow();
                    int selCol = table.getSelectedColumn();
                    table.editCellAt(selRow, selCol);
                }
            });
    
            final Action rightAction = table.getActionMap().get("selectNextColumn");
            table.getActionMap().put("selectNextColumn", new AbstractAction() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    rightAction.actionPerformed(e);
                    int selRow = table.getSelectedRow();
                    int selCol = table.getSelectedColumn();
                    table.editCellAt(selRow, selCol);
                }
            });
        }
    
        public static void main(String[] args)  {
    
            new Sample();
        }
    }
    

    代码参考外网:https://www.javaprogrammingforums.com/awt-java-swing/29972-jtable-keybings-defaults-vk_left-vk_right.html

    展开全文
  • WebKit焦点切换的流程

    千次阅读 2013-04-25 08:30:35
    WebKit的焦点切换与Tab事件关联,点击Tab键后,WebKit内核会将焦点切换到下一个焦点. 一. Tab事件的处理  Tab事件在keydown阶段处理,内核处理的入口是EventHandler::keyEvent(const PlatformKeyboardEvent& ...

        WebKit Focus Shift与Tab Key Event关联,点击TAB Key后,WebKit内核会将焦点切换到下一个焦点. 焦点变换一般通过TAB Key触发,所以首先需要了解TAB Event的牏流程。

    一. Tab事件的处理

        Tab Event准确说是TAB Key Event,  是在keydown阶段处理,内核处理的入口是:

     EventHandler::keyEvent(const PlatformKeyboardEvent& initialKeyEvent);

        这个接口实现两个功能:

        1. 找到Tab Event的Target节点 : 

    RefPtr<Node> node = eventTargetNodeForDocument(m_frame->document());

        2. 在keydown阶段对dispatch事件到Target节点:

    node->dispatchEvent(keydown, ec);

        以下是WebKit在收到TAB Key Event后,进行焦点切换的堆栈:    

        nextNodeWithGreaterTabIndex
        WebCore::FocusController::nextFocusableNode
        WebCore::FocusController::findFocusableNode
        WebCore::FocusController::findFocusableNodeRecursively
        WebCore::FocusController::findFocusableNodeAcrossFocusScope
        WebCore::FocusController::advanceFocusInDocumentOrder
        WebCore::FocusController::advanceFocus
        WebCore::EventHandler::defaultTabEventHandler
        WebCore::EventHandler::defaultKeyboardEventHandler
        WebCore::Node::defaultEventHandler
        WebCore::HTMLTextFormControlElement::defaultEventHandler
        WebCore::HTMLInputElement::defaultEventHandler  
        WebCore::EventDispatcher::dispatchEventPostProcess
        WebCore::EventDispatcher::dispatchEvent
        WebCore::EventDispatchMediator::dispatchEvent  
        WebCore::EventDispatcher::dispatchEvent
        WebCore::Node::dispatchEvent
        WebCore::EventTarget::dispatchEvent
        WebCore::EventHandler::keyEvent

         首先可以看到TAB Key Event事件的EventListener是HTMLInputElement, 在HTMLInputElement::defaultEventHandler中,会调用父类的::defautlEventHandler() ,最终传递到Node::defautlEventHandler(),该函数将找到Node所在的Frame上的EventHandler对象,调用EventHandler::defaultKeyboardEventHandler()方法处理键盘相关的事件; 

         EventHandler::defaultKeyboardEventHnadler(KeyboardEvent* event)方法中,根据Event的m_keyIdentifier类型来选择处理流程,如果m_keyIdentifier == "U+0009", 将调用EventHandler::defaultTabEventHandler(KeyboardEvent* event)处理Tab Key Event.

         EventHandler::defaultTabEventHandler(KeyboardEvent* event)函数通过FocusController找到下一个可聚焦(Focusable)的Node, 并将焦点切换至该Node。     

    二.  焦点的查找

        从以上过程可以看出,下一个Focusable Node的查找是整个处理流程的关键步骤,在以下函数中实现:

    FocusController::nextFocusableNode(FocusNavigationScope scope, Node* start, KeyboardEvent* event)

        其中,

        start:当前的focus node; 

        start是否为空, 可分两种:

    •    start为空:

        1. 以FocusNavigationScope::rootNode()为起始点,以tree order查找tabIndex > 0的点作为winnerNode;

        2. 如果winnerNode为空,从FocusNavigationScope的根节点开始,返回第一个tabIndex为0的点;    

    •    start非空

        1.  检查start是否在Tabbing Cycle中(所谓Tabbing Cycle是由指定了tabindex属性的节点组成的集合);  如果不在,则按照DOM树的结构找到下一个Focusable Node; 如果Focusable Node不存在,进入下一步; 

        2. 在Tabbing Cycle中,查找tabIndex  == start->tabIndex()的Focusable Node,如果成功,则返回; 失败,进入下一步;

        3. 继续查找tabIndex  > start->tabIndex()的Focusable Node,成功则返回;失败则进入下一步;

        4. 从FocusNavigationScope的根节点开始,返回第一个tabIndex为0的点; 


        上面的流程可以简单理解为

        1. 如果参考点不在Tabbling Cycle上,以DOM树的顺序查找; 

        2. 优先查找tabindex相等的点; 

        3. 优先查找tabindex大于0的点; 



    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,451
精华内容 2,180
关键字:

焦点切换