Code: Select all
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTree;
import javax.swing.WindowConstants;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class TreePopupDemo {
private static JTree tree;
public static void main(String[] args) {
Container mainPanel = createMainPanel();
JFrame frame = new JFrame("Tree Popup Demo");
frame.setContentPane(mainPanel);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private static JPanel createMainPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(createTree());
return panel;
}
private static JTree createTree() {
tree = new JTree();
tree.setComponentPopupMenu(createTreePopup());
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
onTreeClick(e);
}
});
return tree;
}
private static JPopupMenu createTreePopup() {
JPopupMenu popup = new JPopupMenu();
PopupMenuListener listener = new PopupMenuAdapter() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
beforePopupAppears();
}
};
popup.addPopupMenuListener(listener);
popup.add(createTestPopupItem());
return popup;
}
private static void beforePopupAppears() {
int[] selectionRows = tree.getSelectionRows();
int selectionRow = isEmpty(selectionRows) ? -1 : selectionRows[0];
System.out.println("Selected tree row: " + selectionRow);
}
private static boolean isEmpty(int[] selectionRows) {
return selectionRows == null || selectionRows.length == 0;
}
private static JMenuItem createTestPopupItem() {
JMenuItem menuItem = new JMenuItem("Test popup item");
return menuItem;
}
private static void onTreeClick(MouseEvent e) {
int x = e.getX();
int y = e.getY();
int row = tree.getRowForLocation(x, y);
if (row >= 0) tree.setSelectionRow(row);
}
private static class PopupMenuAdapter implements PopupMenuListener {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {
}
}
}