가장 우아한 방법으로, 당신은 추가 할 수없는 동안은 당신의 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();
}
}
}
각 목록에서 셀을 선택하고 다음 버튼을 누르면에 FocusListener
는 JVM은 같은 목록을 처리합니다 - 그들은 둘 다에 초점이 이 아닙니다. 당신이 원하는 것은 버튼을 누르기 직전에 포커스가있는 것을 알아야하지만, JVM은 이러한 종류의 정보를 저장하지 않으므로 사용자가 직접 저장해야합니다.
문제는 커서 포커스가 의미하는 것은 "커서 포커스가 JVM을 의미하는 것"이 아니라는 것입니다. :) – user1803551