JPopupMenu는 JComponent 클래스의 하위 클래스로, 마우스 오른쪽 버튼을 클릭하면 화면 어디에서나 나타날 수 있는 팝업 메뉴입니다. 팝업 메뉴를 생성하려면 JPopupMenu 클래스를 사용하면 됩니다.
일반적으로 JPopupMenu에는 메뉴 항목(menu item)들을 추가할 수 있으며, 서브메뉴(submenu)도 추가할 수 있습니다. 서브메뉴를 추가하는 방법은 먼저 서브메뉴에 메뉴 항목들을 추가한 뒤, 그 서브메뉴 전체를 JPopupMenu에 추가하는 것입니다.
팝업 메뉴는 마우스 이벤트에 의해 트리거되므로 MouseListener 인터페이스를 등록해야 합니다. mouseReleased() 메서드를 오버라이드하여 적절한 이벤트가 발생했는지 isPopupTrigger() 메서드로 확인하고, 마우스 이벤트의 좌표를 인수로 전달하며 show() 메서드를 호출해 팝업 메뉴를 화면에 표시할 수 있습니다.
예제 코드
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class JPopupMenuwithSubMenuTest extends JFrame {
private JPopupMenu popup;
private JMenu subMenu;
public JPopupMenuwithSubMenuTest() {
setTitle("JPopupMenuwithSubMenu Test");
popup = new JPopupMenu();
subMenu = new JMenu("Course");
subMenu.add("Java");
subMenu.add("Python");
subMenu.add("Scala");
popup.add(new JMenuItem("First Name"));
popup.add(new JMenuItem("Last Name"));
popup.addSeparator();
popup.add(subMenu);
addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
showPopup(me);
}
}) ;
setSize(400, 275);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
void showPopup(MouseEvent me) {
if(me.isPopupTrigger())
popup.show(me.getComponent(), me.getX(), me.getY());
}
public static void main(String args[]) {
new JPopupMenuwithSubMenuTest();
}
}실행 결과
위 코드를 실행하면 프레임 내에서 마우스 오른쪽 버튼을 클릭했을 때 다음과 같은 팝업 메뉴가 나타납니다. 'First Name'과 'Last Name' 메뉴 항목 아래 구분선이 표시되고, 그 아래에 'Course' 서브메뉴가 있으며, 서브메뉴에 마우스를 올리면 'Java', 'Python', 'Scala' 항목이 펼쳐집니다.

핵심 포인트 정리
- JMenu 객체를 생성해 서브메뉴를 만들고, 여기에 JMenuItem을 추가합니다.
- 완성된 서브메뉴를
popup.add(subMenu)형태로 JPopupMenu에 추가합니다. addSeparator()를 사용하면 메뉴 항목 사이에 구분선을 넣을 수 있습니다.- 마우스 이벤트 처리 시
isPopupTrigger()로 팝업 조건을 확인한 후show()메서드로 메뉴를 표시합니다.