ポップアップメニュー  (JPopupMenu の利用)

マウス位置にポップアップメニューを表示するプログラムです。

package test;

import java.awt.*;//BorderLayoutなどのパッケージ用
import java.awt.event.*;//MouseListenerなどのパッケージ用
import javax.swing.*;//JPanelなどのパッケージ用
import javax.swing.border.*;//LineBorderのパッケージ用

class MainPanel extends JPanel implements MouseMotionListener,MouseListener
{
	JLabel label = new JLabel("マウス座標:");
	JLabel labelX = new JLabel("x", JLabel.RIGHT);//マウス座標X
	JLabel labelY = new JLabel("y", JLabel.RIGHT);//マウス座標Y
	JTextArea text = new JTextArea();
	JScrollPane pane = new JScrollPane(text);
	
	JPopupMenu popupMenu = new JPopupMenu();

	public MainPanel()
	{
		this.setLayout(null);
		LineBorder border = new LineBorder(Color.BLUE, 1);
		this.labelX.setBorder(border);//ラベルに上記の枠をセット
		this.labelY.setBorder(border);//ラベルに上記の枠をセット
		this.add(label);//パネルに配置
		this.add(labelX);//パネルに配置
		this.add(labelY);//パネルに配置
		this.add(pane);//パネルに配置
		label.setBounds(10, 10, 95, 20);//ラベルの位置(10, 10)とサイズ(95, 20)を指定
		labelX.setBounds(100, 10, 50, 20);
		labelY.setBounds(155, 10, 50, 20);
		pane.setBounds(10, 35, 370, 220);

		this.text.addMouseMotionListener(this);//マウス移動などのメソッドがあるオブジェクトをセット
		this.text.addMouseListener(this);//マウスプレスなどのメソッドがあるオブジェクトをセット
	}
	//指定コンポーネントの上で、マウスのボタンを押してドラッグすると呼び出されます。 
	public void mouseDragged(MouseEvent e)
	{
	}

	//ボタンを押さずに、マウスを指定コンポーネントで移動すると呼び出されます。 
	public void mouseMoved(MouseEvent e)
	{
		Point p = e.getPoint();//ドマウスの座標取得
		this.labelX.setText("" + p.x);
		this.labelY.setText("" + p.y);
	}

	public void mouseEntered(MouseEvent e)
	{// コンポーネントにマウスが入ると呼び出されます。
	}
	public void mousePressed(MouseEvent e)
	{// コンポーネント上でマウスボタンが押されると呼び出されます。 
		Point p = e.getPoint();//ドマウスの座標取得
		this.popupMenu.add("AA");
		JMenu menu = new JMenu("BB");
		menu.add("BBBB");
		this.popupMenu.add(menu);
		this.popupMenu.show(this.text, p.x, p.y);
	}
	public void mouseReleased(MouseEvent e)
	{// コンポーネント上でマウスボタンが離されると呼び出されます。 
	}
	public void mouseClicked(MouseEvent e)
	{//マウスクリック
	}
	public void mouseExited(MouseEvent e)
	{//コンポーネントからマウスが出ると呼び出されます。 
	}

}

class TestFrame extends JFrame
{
	MainPanel panel = new MainPanel();
	public TestFrame()
	{//コンストラクタ
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.getContentPane().add(panel, BorderLayout.CENTER);
		this.setSize(400, 300);
		this.setVisible(true);
	}
}

public class TestJPopupMenu extends JApplet
{//アプレット時
	MainPanel panel = new MainPanel();
	public TestJPopupMenu()
	{//コンストラクタ
		this.getContentPane().add(panel, BorderLayout.CENTER);
	}
	public static void main(String[] args)
	{//ローカル起動時
		new TestFrame();
	}
	public void newTestFrame()
	{
		new TestFrame();
	}
}