시도 : F2 시작 편집 및 입력 편집을 중지하고 포커스를 다음 구성 요소로 전환하고 밀리 초 단위로 트리 노드로 돌아갑니다. 이 예에서는 JTabbedPane-Header에서 깜박이는 focusPainted 사각형을 볼 수 있습니다. FocusListener를 사용하면 명확 해집니다.노드를 편집 한 후 JTree에서 짧은 시간 동안 포커스를 잃는 이유는 무엇입니까?
노드 편집 후 JTree에서 짧은 시간 동안 포커스를 잃는 이유는 무엇입니까?
이 동작을 방지하려면 어떻게해야합니까?
public class Focus {
private static void createAndShowGUI() {
final JTextArea text = new JTextArea("Tab Header gained focus");
JTree tree = new JTree();
tree.setEditable(true);
int row = 0;
while(row < tree.getRowCount()) {
tree.expandRow(row++);
}
JTabbedPane tabp = new JTabbedPane();
tabp.addTab("Lorem", text);
tabp.addFocusListener(new FocusListener() {
@Override
public void focusLost(FocusEvent e) { }
@Override
public void focusGained(FocusEvent e) {
text.setText(text.getText() +"\nWoohoo, I got the focus!");
}
});
JFrame frame = new JFrame("Focus");
frame.setLayout(new BorderLayout());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(tree, BorderLayout.WEST);
frame.getContentPane().add(tabp, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
tree.startEditingAtPath(tree.getPathForRow(0));
}
public static void main(String[] x) {
EventQueue.invokeLater(new Runnable() {
@Override public void run() {
createAndShowGUI();
}
});
}
}
트리 노드 편집을 마친 후 Enter 키를 누르면 포커스는 방금 편집 한 JTree 노드에 유지됩니다. F2를 다시 누르면 마우스를 어디로 이동하든 동일한 노드를 다시 편집 할 수 있습니다. 초점은 괜찮아 보인다. –