未验证 提交 092d0d7e 编写于 作者: S Skylot

fix(gui): reduce tree focus switching

上级 5ca72855
......@@ -15,6 +15,8 @@ import java.awt.dnd.DnDConstants;
import java.awt.dnd.DropTarget;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
......@@ -680,28 +682,29 @@ public class MainWindow extends JFrame {
reOpenFile();
}
private void nodeClickAction(@Nullable Object obj) {
private boolean nodeClickAction(@Nullable Object obj) {
if (obj == null) {
return false;
}
try {
if (obj == null) {
return;
}
if (obj instanceof JResource) {
JResource res = (JResource) obj;
ResourceFile resFile = res.getResFile();
if (resFile != null && JResource.isSupportedForView(resFile.getType())) {
tabbedPane.showNode(res);
return tabbedPane.showNode(res);
}
} else if (obj instanceof JNode) {
JNode node = (JNode) obj;
if (node.getRootClass() != null) {
tabbedPane.codeJump(new JumpPosition(node));
} else {
tabbedPane.showNode(node);
return true;
}
return tabbedPane.showNode(node);
}
} catch (Exception e) {
LOG.error("Content loading error", e);
}
return false;
}
private void treeRightClickAction(MouseEvent e) {
......@@ -738,6 +741,7 @@ public class MainWindow extends JFrame {
}
Object obj = path.getLastPathComponent();
if (obj instanceof JNode) {
tree.setSelectionPath(path);
return (JNode) obj;
}
return null;
......@@ -1090,11 +1094,22 @@ public class MainWindow extends JFrame {
tree = new JTree(treeModel);
ToolTipManager.sharedInstance().registerComponent(tree);
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setFocusable(false);
tree.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
tree.setFocusable(false);
}
});
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
nodeClickAction(getJNodeUnderMouse(e));
if (!nodeClickAction(getJNodeUnderMouse(e))) {
// click ignored -> switch to focusable mode
tree.setFocusable(true);
tree.requestFocus();
}
} else if (SwingUtilities.isRightMouseButton(e)) {
treeRightClickAction(e);
}
......
......@@ -203,12 +203,13 @@ public class TabbedPane extends JTabbedPane {
});
}
public void showNode(JNode node) {
public boolean showNode(JNode node) {
final ContentPanel contentPanel = getContentPanel(node);
if (contentPanel == null) {
return;
return false;
}
SwingUtilities.invokeLater(() -> selectTab(contentPanel));
selectTab(contentPanel);
return true;
}
public void selectTab(ContentPanel contentPanel) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册