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