【Java】マウスがコンポーネント上を移動したときにイベントを検出する方法
マウスイベントを処理する際、MouseListener インターフェースを実装することで、マウスの操作を検出できます。MouseEvent は、ソースオブジェクト上でマウスボタン(左ボタンまたは右ボタン)を「押す」「離す」「クリックする(押してから離す)」、あるいはマウスポインタがソースオブジェクトに「入った(enter)」ときや「出た(exit)」ときに発生します。
たとえばラベルなどのコンポーネント上にマウスが乗ったことを検出したい場合は、MouseAdapter クラスまたは MouseListener インターフェースの mouseEntered() メソッドを使用します。逆に、マウスがコンポーネントから離れたことを検出するには mouseExited() メソッドを利用します。
MouseAdapter は MouseListener の空実装を提供するアダプタクラスのため、必要なメソッドだけをオーバーライドすればよく、コードがすっきりするというメリットがあります。
サンプルコード
以下の例では、JLabel の上にマウスカーソルが入ると背景色と文字色が入れ替わり、マウスが離れると元に戻ります。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MouseOverTest extends JFrame {
private JLabel label;
public MouseOverTest() {
setTitle("MouseOver Test");
setLayout(new FlowLayout());
label = new JLabel("Move the mouse moves over this JLabel");
label.setOpaque(true);
add(label);
label.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent evt) {
Color c = label.getBackground(); // マウスがラベル上に乗ると、背景色が変更される
label.setBackground(label.getForeground());
label.setForeground(c);
}
public void mouseExited(MouseEvent evt) {
Color c = label.getBackground();
label.setBackground(label.getForeground());
label.setForeground(c);
}
});
setSize(400, 275);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new MouseOverTest();
}
}実行結果
プログラムを実行するとウィンドウが表示され、ラベルの上にマウスを移動させると文字色と背景色が反転して表示されます。マウスをラベルの外へ移動すると、色が元の状態に戻ります。このように mouseEntered() と mouseExited() を組み合わせることで、マウスオーバー時の視覚的なフィードバックを簡単に実装できます。
-
Java SwingのJButtonでHTMLテキストを実装する方法
JButtonはAbstractButtonのサブクラスであり、Java Swingのコンポーネント階層において非常に重要な役割を担うクラスです。JButtonは、ログイン画面を持つアプリケーションなど、ユーザーに操作を促す場面で広く利用されています。ボタンを押下・クリックすると、ActionListenerインターフェースを通じてアクションイベントが発生し、それに応じた処理を実行できます。また、JButtonにはテキストのみ、アイコンのみ、あるいはテキストとアイコンの両方を設定することが可能です。さらに便利な点として、ボタンのラベルにHTMLタグを使用できるため、太字(bold)や斜体(it
-
JavaでJPanelのpaintComponent()メソッドを実装する方法をわかりやすく解説
JPanelはJavaにおける軽量コンテナであり、それ自体は不可視(インビジブル)なコンポーネントとして扱われます。デフォルトのレイアウトにはFlowLayoutが採用されています。JPanelを生成した後は、Containerクラスから継承されたadd()メソッドを呼び出すことで、ボタンやラベルなどの他のコンポーネントをJPanelオブジェクトに自由に追加できます。 paintComponent()メソッドとは このメソッドは、単なる背景色の描画にとどまらず、JPanel上に独自の図形や画像などを描画したい場合に必要となります。paintComponent()メソッドはすでにJPanelクラ