【Java】【Swing】 右クリック時の動作 ~ JPopupMenu/JMenuItem ~

サンプル

PopupMenuSample.java

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

public class PopupMenuSample extends JFrame implements MouseListener, ActionListener {
  private static final long serialVersionUID = 1L;

  public static void main(String[] args) {
    PopupMenuSample sample = new PopupMenuSample();
    sample.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    sample.setBounds(10, 10, 300, 200);
    sample.setVisible(true);
  }

  private JPopupMenu popup;
  private JMenuItem copyMenuItem;
  private JMenuItem pasteMenuItem;

  public PopupMenuSample() {
    JButton button = new JButton("button");
    button.addMouseListener(this);
    JPanel panel = new JPanel();
    panel.add(button);

    this.popup = new JPopupMenu();

    this.copyMenuItem = new JMenuItem("コピー");
    this.pasteMenuItem = new JMenuItem("ペースト");
    this.copyMenuItem.addActionListener(this);
    this.pasteMenuItem.addActionListener(this);
    this.popup.add(this.copyMenuItem);
    this.popup.add(this.pasteMenuItem);
    
    getContentPane().add(panel, BorderLayout.CENTER);
  }

  @Override
  public void mouseClicked(MouseEvent e) {
    // Do nothing
  }

  @Override
  public void mousePressed(MouseEvent e) {
    this.showPopup(e);
  }

  @Override
  public void mouseReleased(MouseEvent e) {
    this.showPopup(e);
  }

  @Override
  public void mouseEntered(MouseEvent e) {
    // Do nothing
  }

  @Override
  public void mouseExited(MouseEvent e) {
    // Do nothing
  }

  private void showPopup(MouseEvent event) {
    if (event.isPopupTrigger()) {
      this.popup.show(event.getComponent(), event.getX(), event.getY());
    }
  }

  @Override
  public void actionPerformed(ActionEvent actionEvent) {
    Object control = actionEvent.getSource();
    if (control == this.copyMenuItem) {
      JOptionPane.showMessageDialog(this, "Press Copy", "Info", JOptionPane.INFORMATION_MESSAGE);
    } else if (control == this.pasteMenuItem) {
      JOptionPane.showMessageDialog(this, "Press Paste", "Info", JOptionPane.INFORMATION_MESSAGE);
    }
  }
}


関連記事

テーブル ~ JTable ~

http://blogs.yahoo.co.jp/dk521123/36599082.html