方法一:
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class JPopupMenuTest extends JFrame {
public JPopupMenuTest() {
JButton button = new JButton("登錄");
this.add(button);
//為按鈕添加單擊事件
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("按到了");
}
});
final String id= button.getText();
//為按鈕創建一個右鍵菜單
JPopupMenu pop = new JPopupMenu(id);
JMenuItem item1 = new JMenuItem("功能1");
item1.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e) {
System.out.println(id);//輸出按鈕的文本
}
});
pop.add(item1);
button.setComponentPopupMenu(pop);//將按鈕與右鍵菜單關聯
this.setLayout(new FlowLayout());
this.setBounds(100, 100, 300, 300);
this.setVisible(true);
}
public static void main(String[] args) {
new JPopupMenuTest();
}
}
方法二:
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.*;
public class JPopupMenuTest extends JFrame {
public JPopupMenuTest() {
JButton button2 = new JButton("101");
this.add(button2);
button2.addMouseListener(new MouseAdapter() {
@Override
public void mouseReleased(MouseEvent e) {
showPopupMenu(e);
}
});
this.setLayout(new FlowLayout());
this.setBounds(100, 100, 300, 300);
this.setVisible(true);
}
private void showPopupMenu(MouseEvent e) {
// 如果當前事件與右鍵菜單有關(單擊右鍵),則彈出菜單
if (e.isPopupTrigger()) {
JPopupMenu pop = new JPopupMenu("id1");
final String sid = ((JButton) e.getComponent()).getText();
JMenuItem item1 = new JMenuItem("功能1");
item1.addMouseListener(new MouseAdapter(){
public void mouseReleased(MouseEvent e) {
System.out.println(sid);
}
});
pop.add(item1);
//e.getComponent()表示與右鍵菜單關聯的組件,這里指button2
pop.show(e.getComponent(), e.getX(), e.getY());
}else{//如果是正常單擊(左鍵)
System.out.println("按到了");
}
}
public static void main(String[] args) {
new JPopupMenuTest();
}
}