在GUI中,我在JPanel
的左側顯示一個JTree
。現在對於每個Node(leaf)
,在鼠標右鍵單擊上,我想要顯示JPopup
菜單,要求在右邊的JPanel
中顯示有關Node
的統計信息。右鍵單擊Java中的Swing節點添加JPopup菜單
由於我是新的擺動,任何人都可以幫助代碼。 在此先感謝。
Regards, Tushar Dodia。
在GUI中,我在JPanel
的左側顯示一個JTree
。現在對於每個Node(leaf)
,在鼠標右鍵單擊上,我想要顯示JPopup
菜單,要求在右邊的JPanel
中顯示有關Node
的統計信息。右鍵單擊Java中的Swing節點添加JPopup菜單
由於我是新的擺動,任何人都可以幫助代碼。 在此先感謝。
Regards, Tushar Dodia。
使用的JTree的方法
public TreePath getPathForLocation(int x, int y)
隨後的TreePath
public Object getLastPathComponent()
返回從點所需的節點,在用戶右鍵點擊。
說的ISN有關如何爲JPopup添加的MouseListener到JTree的 – mKorbel
的,我認爲,問題不在於「如何添加彈出」,而是「如何添加彈出取決於點擊節點「 – StanislavL
好,很好的建議+1 – mKorbel
似乎已經引起了一些混亂(混淆自己;-) - 所以這裏做的componentPopup
JPopupMenu popup = new JPopupMenu();
final Action action = new AbstractAction("empty") {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
};
popup.add(action);
JTree tree = new JTree() {
/**
* @inherited <p>
*/
@Override
public Point getPopupLocation(MouseEvent e) {
if (e != null) {
TreePath path = getClosestPathForLocation(e.getX(), e.getY());
action.putValue(Action.NAME, String.valueOf(path.getLastPathComponent()));
return e.getPoint();
}
action.putValue(Action.NAME, "no mouse");
return null;
}
};
tree.setComponentPopupMenu(popup);
我把@kleopatra解決方案,改變了它稍微的目標位置相關的配置代碼段。 也許這不是最好的方式,但爲我工作。
JTree tree = new JTree() {
private static final long serialVersionUID = 1L;
@Override public Point getPopupLocation(MouseEvent e) {
if (e == null) return new Point(0,0);
TreePath path = getClosestPathForLocation(e.getX(), e.getY());
Object selected = path != null ? path.getLastPathComponent() : null;
setComponentPopupMenu(getMenuForTreeNode(getComponentPopupMenu(), selected));
setSelectionPath(path);
return e.getPoint();
}
};
public JPopupMenu getMenuForTreeNode(JPopupMenu menu, Object treeNode) {
if (menu == null) menu = new JPopupMenu("Menu:");
menu.removeAll();
if (treeNode instanceof MyTreeItem) {
menu.add(new JMenuItem("This is my tree item: " + treeNode.toString()));
}
return menu;
}
改變componentPopup實例(不確定是否這樣做,只是說:-)會有點脆弱:它取決於getPopupLocation的調用代碼來調用getComponentPopup _after_請求位置。 Oracle的BasicLookAndFeel中偶然會出現這種情況,其他實現可能不會 – kleopatra
我修改您的文章,請回復,如果不是... – mKorbel