マウス位置にポップアップメニューを表示するプログラムです。
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();
}
}