ガラス板の下に 2 つの画像を含むコードがあります。各画像が独自のガラス枠の下にあり、各ガラス枠が独自のマウスリスナーの信号を送るようにしたいと考えています。現在、私は両方を 1 つのガラス板の下に作成し、ガラス板全体に対して 1 つのマウスリスナーを使用しています。どちらの画像もグリッド レイアウトで並べて表示されているため、ガラス ペインを半分に分割するのは難しくありません。これは 1 つのガラス ペインのコードですが、2 つのガラス ペインと、画像ごとに 2 つの個別のマウス リスナ クラスを作成しようとしていることに注意してください。これは、**両方の画像に対して 1 つの*マウス リスナーを使用した単なるコードです。
package Buttons;
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Giraffewindow extends JDialog {
public Giraffewindow() {
JDialog giraffewindow = new JDialog();
Icon giraffe = new ImageIcon(getClass().getResource("giraffe.png"));
Icon windows = new ImageIcon(getClass().getResource("windows.png"));
giraffewindow.setLayout(new GridLayout(1, 2, 0, 0));
giraffewindow.add(new JLabel(windows));
giraffewindow.add(new JLabel(giraffe));
giraffewindow.pack();
giraffewindow.setTitle("GIRAFFE!");
giraffewindow.setVisible(true);
giraffewindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JPanel glass = ((JPanel) giraffewindow.getGlassPane());
glass.setVisible(true);
status = new JLabel("I can change");
glass.add(status);
glass.setLayout(null);
giraffemousehandler giraffemouse = new giraffemousehandler();
glass.addMouseListener(giraffemouse);
glass.addMouseMotionListener(giraffemouse); //Can I add mouse motion listener to a picture
// setLayout(null);
}
JLabel status = null;
class giraffemousehandler extends MouseAdapter implements MouseListener, MouseMotionListener { //MouseAdapter makes it so that you don't have to have all 7 implemented mouse listener methods
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
status.setBounds(e.getX(), e.getY(), 50, 60); //Makes JLabel follow mouse
}
@Override
public void mouseEntered(MouseEvent e) {
status.setText("Enter);
}
@Override
public void mouseExited(MouseEvent e) {
status.setText("Exit");
// status.setBounds(e.getX(), e.getY(), 5, 6);
}
}
}
camickr のリクエストによるコードは次のとおりです。2 つの別個のマウス リスナーがあることに注意してください。別の方法でそれを行う方法を知りたいです。JLabel がマウスを追跡する場合、1) マウスから非常に離れている、2) 完全な JLabel が表示されない、3) 1 回の終了/開始後に変更されない。本当に助かりました。camickrs のアドバイスに基づいたコードは次のとおりです。
import java.awt.GridLayout;
import java.awt.event.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
class SSCCE extends JDialog {
public SSCCE() {
JDialog giraffewindow = new JDialog();
Icon giraffe = new ImageIcon(getClass().getResource("giraffe.png"));
Icon windows = new ImageIcon(getClass().getResource("windows.png"));
giraffewindow.setLayout(new GridLayout(1, 2, 0, 0));
JLabel giraffelabel = new JLabel();
JLabel windowlabel = new JLabel();
windowlabel.setIcon(windows);
giraffelabel.setIcon(giraffe);
giraffewindow.add(windowlabel);
giraffewindow.add(giraffelabel);
giraffewindow.setTitle("Title!");
giraffewindow.setSize(1100, 600);
giraffewindow.setVisible(true);
giraffewindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JPanel glass = ((JPanel) giraffewindow.getGlassPane()); //Glasspane
glass.setVisible(true);
status = new JLabel("I can change"); //This is the JLabel which should follow my mouse
glass.add(status);
glass.setLayout(null);
giraffemousehandler giraffemouse = new giraffemousehandler();
windowmousehandler windowmouse = new windowmousehandler();
windowlabel.addMouseListener(windowmouse);
giraffelabel.addMouseMotionListener(giraffemouse); //Can I add mouse motion listener to a picture
// setLayout(null);
}
JLabel status = null;
class giraffemousehandler extends MouseAdapter implements MouseListener, MouseMotionListener { //MouseAdapter makes it so that you don't have to have all 7 implemented mouse listener methods
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
status.setBounds(e.getX(), e.getY(), 50, 60); //Makes JLabel follow mouse
}
@Override
public void mouseEntered(MouseEvent e) {
status.setText("Mouse is on giraffe");
}
@Override
public void mouseExited(MouseEvent e) {
status.setText("Mouse has left giraffe");
// status.setBounds(e.getX(), e.getY(), 5, 6);
}
}
class windowmousehandler extends MouseAdapter implements MouseListener, MouseMotionListener {
public void mouseMoved(MouseEvent event) {
// TODO Auto-generated method stub
status.setBounds(event.getX(), event.getY(), 50, 60); //Makes JLabel follow mouse
}
public void mouseEntered(MouseEvent event) {
status.setText("Mouse is on window");
}
@Override
public void mouseExited(MouseEvent event) {
status.setText("Mouse has left window");
// status.setBounds(e.getX(), e.getY(), 5, 6);
}
}
}
public class Icallsscce {
public static void main(String [] args) {
SSCCE object = new SSCCE();
}
}