我有一些代码与两个图像下的玻璃窗格。我想让每个图像都在自己的玻璃窗格下,每个玻璃窗格都发出自己的鼠标识别器的信号。目前,我已经在一个玻璃窗格下制作了两个,整个玻璃窗格都有一个防腐剂。两个图像都并排在网格布局中,所以将玻璃窗格分成两半应该不会太难。下面是一个玻璃窗格的代码,但请注意,我试图为每个图像创建两个玻璃窗格和两个分离的鼠标侦听器类。这只是一段代码,两个图像都有一个鼠标监听器:
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请求的代码,请注意有两个单独的鼠标监听器,我很想知道如何做到这一点。当JLabel跟随鼠标时,1)它离鼠标非常远,2)它不会显示完整的JLabel和3)在一次退出/进入后它不会改变。我非常感谢您的帮助,下面是基于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();
}
}
如果你真正理解你想要实现的目标,几乎每一个问题都可以在10-50行代码中演示出来。
不。组件就是组件,你不能把一个组件一分为二。
您有几个选择:
编辑:
如何将getSource()方法添加到MouseEvent中?
10天前就已经回答了这个问题:在JLabel上翻转,它由网格布局中的图像组成?。
当你甚至不看代码时,它会变得很烦人,因为它不是一个完整的程序。我们不是来给你写代码的。当有人花时间回答一个问题时,你至少要花时间理解这个建议。
1)离老鼠极远,
我在这个问题中已经回答过了。我声明您需要添加标签的“x”值..
。您需要这样做,因为鼠标事件是相对于侦听器添加到的组件生成的。
popupLabel.setLocation(e.getX() + giraffe.getLocation().x, e.getY());
2)它不显示完整的JLabel
因为您在setBounds()方法中使用了“神奇的数字”。为什么要用像“60”这样的数字来表示标签的宽度?不要硬编码数字。相反,当您更改标签的文本时,您可以执行以下操作:
label.setText(....);
label.setSize(label.getPreferredSize());
现在标签将具有适当的宽度/高度。然后,在玻璃窗格上移动标签时,只需使用setlocation(...)
方法定位标签。
您要实现一个MouseListener和一个MouseMotionListener,因此需要将这两个监听器添加到每个组件中。所以你需要:
长颈鹿。addmouselistener(...);长颈鹿。addmousemotionListener(...);AddMouseListener(...);Window.AddMousEmotionListener(...);
同样,请记住,您只需要一个类来实现MouseListener和MouseMotionListener,就像10天前演示的那样。监听器的同一个实例可以添加到两个组件中,这将有助于清理代码。
问题内容: 关于此的几个问题: 这是好习惯吗? 它将大规模地缩短加载时间吗? 会导致浏览器“崩溃”吗? JavaScript(/ jQuery)中的最后一个函数是否也是如此? 我的意思是这样的: 问题答案: 这是好习惯吗? 手动排除分号不是一个好习惯。这纯粹是因为添加更多样式时很容易忽略,尤其是在团队中工作时: 假设您从以下内容开始: 然后有人添加了一些样式: 突然,另一个开发人员在浪费时间弄清楚
本文向大家介绍我们可以在Java中的另一个try catch块中声明一个try catch块吗?,包括了我们可以在Java中的另一个try catch块中声明一个try catch块吗?的使用技巧和注意事项,需要的朋友参考一下 是的,我们可以 在另一个try-catch块中声明一个try-catch块,这称为嵌套try-catch块。 嵌套的尝试捕获块 如果一个内部的try statemen牛逼没
本文向大家介绍一个try块在Java中可以有多个catch块吗?,包括了一个try块在Java中可以有多个catch块吗?的使用技巧和注意事项,需要的朋友参考一下 是的,单个try块可以有多个catch块。 示例 以下Java程序包含一个数字数组(显示)。从用户那里,它接受此数组中的两个位置,然后将第一个位置的数字除以第二个位置的数字。 输入值时- 如果选择的位置不在显示的数组中,则抛出Array
可能重复: 如何在Java中将字符串转换为int? 我的代码应该读取字符串,然后采取相应的操作,但如果字符串是一行数字,我需要这一行作为一个完整的数字(一个int)而不是作为一个字符串,这可以做到吗?
是否有一种明智的方法让一个perl6模块检查另一个perl6模块的存在,并在安装时“使用”它? 像这样的。。。 其思想是传播操作符重载(中缀: (请不要拆掉排水管,因为我怀疑总有办法!)
我安装了Windows和Linux双系统 ,Windows系统崩了, 但是Linux系统还能运行, 我想在Linux上,直接把Windows安装的iso镜像文件,写入Windows所在分区. 该如何做? dd命令可以吗?但是dd命令好像不能操作分区吧