嗨,我正在使用Java Swing构建一个简单的标记工具。组件中有两个JLists,每当我单击标记按钮时,我都想在给定文本中添加标记。如果我的光标焦点位于左侧JList上,我想修改左侧JList上的文本,如果它位于右侧,则修改右侧的JList。光标焦点的意思是我可以使用键盘箭头导航列表项的位置。
因此按钮侦听器应该判断当前光标焦点是在左侧Jlist还是右侧。我该怎么做?我已经尝试过使用“getFocusOwner”,但它会返回我刚刚点击的按钮。
答案 0 :(得分:1)
虽然不是最优雅的方式,但您可以在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没有存储这类信息所以你必须自己存储它。