Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaSwing中,如何判断两个JList中哪一个具有光标焦点?_Java_Swing_Jlist_Jcomponent - Fatal编程技术网

在JavaSwing中,如何判断两个JList中哪一个具有光标焦点?

在JavaSwing中,如何判断两个JList中哪一个具有光标焦点?,java,swing,jlist,jcomponent,Java,Swing,Jlist,Jcomponent,您好,我正在使用JavaSwing构建一个简单的标记工具。组件中有两个jList,每当我单击tagging(标记)按钮时,我都希望向给定文本添加标记。如果我的光标焦点在左JList上,我想修改左JList上的文本,如果它在右JList上,则修改右JList。我所说的光标焦点是指我可以使用键盘箭头导航列表项的位置 因此,按钮侦听器应该告诉您当前光标的焦点是在左侧还是右侧。我该怎么做?我已经尝试过使用“getFocusOwner”,但它会返回我刚才单击的按钮 虽然不是最优雅的方式,但您可以将Focu

您好,我正在使用JavaSwing构建一个简单的标记工具。组件中有两个jList,每当我单击tagging(标记)按钮时,我都希望向给定文本添加标记。如果我的光标焦点在左JList上,我想修改左JList上的文本,如果它在右JList上,则修改右JList。我所说的光标焦点是指我可以使用键盘箭头导航列表项的位置


因此,按钮侦听器应该告诉您当前光标的焦点是在左侧还是右侧。我该怎么做?我已经尝试过使用“getFocusOwner”,但它会返回我刚才单击的按钮

虽然不是最优雅的方式,但您可以将
FocusListener
添加到
Jlist
s中

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();
        }
    }
}
public类CheckFocus扩展JFrame{
JList focusedList=null;
JList list1=新JList(新字符串[]{“A”,“B”});
JList list2=新JList(新字符串[]{“1”,“2”});
CheckFocus(){
JButton btn=新JButton(“谁有焦点?”);
btn.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
if(focusedList.equals(list1))
System.out.println(“列表1”);
else if(focusedList.equals(list2))
System.out.println(“列表2”);
其他的
系统输出打印项次(“无”);
}
});
MyFocusListener mfl=新建MyFocusListener();
列表1.addFocusListener(mfl);
列表2.addFocusListener(mfl);
getContentPane().add(列表1,BorderLayout.LINE_开始);
getContentPane().add(列表2,BorderLayout.LINE_END);
getContentPane().add(btn,BorderLayout.CENTER);
setDefaultCloseOperation(关闭时退出);
包装();
setVisible(真);
}
公共静态void main(字符串[]args){
新的CheckFocus();
}
类MyFocusListener扩展了FocusAdapter{
@凌驾
获得公共无效焦点(焦点事件e){
超级聚焦(e);
focusedList=(JList)e.getSource();
}
}
}

如果您在每个列表上选择一个单元格,然后按下一个按钮,JVM将对列表进行相同的处理—它们目前都没有焦点。您想知道的是,在按下按钮之前,哪个具有焦点,但JVM不存储此类信息,因此您必须自己存储。

您的问题是
我所说的光标焦点…
不是“JVM所说的光标焦点”。)