当前位置: 首页 > 知识库问答 >
问题:

如何在Java Swing中区分两个JList中哪一个具有光标焦点?

宓季同
2023-03-14

嗨,我正在使用Java Swing构建一个简单的标记工具。组件中有两个JList,每当我单击tagging按钮时,我都想给给定的文本添加一个标记。如果我的光标焦点在左边的JList上,我想修改左边的JList上的文本,如果是右边的,修改右边的。我所说的光标焦点是指我可以使用键盘箭头导航列表项的地方。

所以按钮监听器应该告诉当前光标焦点是在左边的Jlist上还是在右边的Jlist上。我该怎么做呢?我已经尝试过使用“getFocusOwner”,但它返回我刚才点击的按钮。

共有1个答案

易招
2023-03-14

虽然不是最优雅的方法,但您可以将FocusListener添加到JList

public class CheckFocus extends JFrame {

    JList<String> focusedList = null;
    JList<String> list1 = new JList<>(new String[]{"A", "B"});
    JList<String> list2 = new JList<>(new String[]{"1", "2"});

    CheckFocus() {

        JButton btn = new JButton("Who has focus?");

        btn.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {    

                if (focusedList.equals(list1))
                    System.out.println("list1");
                else if (focusedList.equals(list2))
                    System.out.println("list2");
                else
                    System.out.println("none");
            }
        });

        MyFocusListener mfl = new MyFocusListener();
        list1.addFocusListener(mfl);
        list2.addFocusListener(mfl);

        getContentPane().add(list1, BorderLayout.LINE_START);
        getContentPane().add(list2, BorderLayout.LINE_END);
        getContentPane().add(btn, BorderLayout.CENTER);

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {

        new CheckFocus();
    }


    class MyFocusListener extends FocusAdapter {

        @Override
        public void focusGained(FocusEvent e) {

            super.focusGained(e);
            focusedList = (JList<String>) e.getSource();
        }
    }
}

如果您在每个列表上选择一个单元格,然后按下一个按钮,JVM对列表的处理是一样的--此时它们都没有焦点。您想要的是在按下按钮之前知道哪一个有焦点,但是JVM不存储这种信息,所以您必须自己存储它。

 类似资料:
  • 问题内容: 我有一个表格,其中包含所有新信息。该表用作所有新闻源查询的参考,因此从那里选择事件项,并从正确的表中检索与该事件相对应的信息。 现在,这是我的问题。我在事件表中有,它对应于不同表中事件的ID,例如for ,for 等等。这些ID可能相同,所以暂时我只是使用了一个不同的auto_increment值对于每个这样在500 上以0等开始的表。显然,我不想这样做,因为我还不知道哪个表中的数据最

  • 问题内容: javascript中是否有办法确定哪个html页面元素具有焦点? 问题答案: 使用该属性。 Chrome 2 +,Firefox 3 +,IE4 +,Opera 9.6+和Safari 4+支持该属性。 请注意,此属性将仅包含接受键击的元素(例如,表单元素)。

  • 问题内容: 我想用JavaScript找出当前关注的元素。我一直在浏览DOM,但尚未找到我需要的东西。有没有办法做到这一点,怎么做? 我寻找这个的原因: 我正在尝试制作箭头之类的键并浏览输入元素表。选项卡现在可以使用,但是可以输入,默认情况下,箭头没有显示。我已经设置了关键处理部分,但是现在我需要弄清楚如何在事件处理功能中转移焦点。 问题答案: 使用,所有主要浏览器均支持。 以前,如果您试图找出哪

  • 我们使用的是 Kafka 2.5.1 版本集群。最近注意到其中一个主题分区数据大小不均匀。与其余分区相比,一个特定分区的大小增加了 300%。这在群集中造成了不均衡的磁盘利用率。 已验证使用者滞后,看起来像其他分区一样正常 此外,我们使用默认分区程序和设置为默认值的“metadata.max.age.ms”配置,即 300000ms(5 分钟) 我们是如何使分区数据均匀分布的?

  • 问题内容: 我的Android应用有很多按钮。 我的main.xml布局具有三个按钮。 我知道如何使用按钮从一个活动转到另一个活动,但是我不知道如何在一个活动上具有多个按钮,每个按钮启动的活动与另一个活动不同。 例 Main.xml Button1 Button2 Main2.xml 由button1启动 About.xml 由Button2启动 我如何使main.java文件做到这一点? 问题答