Java 将JLabel添加到MouseListener
第一次海报在这里 我正在开发一个Java照片查看器库。 我想将所有标签从ArrayList添加到MouseListener。所以我可以在一个新的大窗口中打开用户点击的图片 我有一个文件选择器,用户可以在其中选择图片的数量。我缩放它们并将它们放在一个: ArrayList scaled=新的ArrayList() 错误:类型组件中的方法addMouseListener(MouseListener)不适用于参数(new ActionListener(){}) 我试着用Java 将JLabel添加到MouseListener,java,swing,Java,Swing,第一次海报在这里 我正在开发一个Java照片查看器库。 我想将所有标签从ArrayList添加到MouseListener。所以我可以在一个新的大窗口中打开用户点击的图片 我有一个文件选择器,用户可以在其中选择图片的数量。我缩放它们并将它们放在一个: ArrayList scaled=新的ArrayList() 错误:类型组件中的方法addMouseListener(MouseListener)不适用于参数(new ActionListener(){}) 我试着用 for (int i=0; i
for (int i=0; i< scaled.size(); i++){
panel.add(new JLabel(new ImageIcon (scaled.get(i))));
JLabel l = new JLabel(new ImageIcon(scaled.get(i)));
l.addMouseListener(this); //<- Compiler Error
}
for(int i=0;i
首先,您没有将标签添加到MouseStener。您将MouseStener添加到标签。您没有实现MouseStener接口,因此会出现编译错误。您需要实现所有方法(mousePressed、MouseRelease…)
阅读Swing教程中关于如何为工作示例编写鼠标侦听器的部分
此外,一旦鼠标侦听器工作,就不需要创建两个标签。基本代码可能类似于:
JLabel l = new JLabel(new ImageIcon(scaled.get(i)));
label.addMouseListener(this); //<- Compiler Error
panel.add( label );
JLabel l=newjlabel(新图像图标(scaled.get(i));
label.addMouseListener(this);//我将使用数组存储所有鼠标信息。
例如:
public class MyApp extends JFrame implements MouseListener, MouseWheelListener {
public int[] mouse=new int[5];
public void mousePressed(MouseEvent m) {
if (m.getButton() == m.BUTTON1) {
mouse[2]=1;
}
if (m.getButton() == m.BUTTON2) {
mouse[3]=1;
}
if (m.getButton() == m.BUTTON3) {
mouse[4]=1;
}
}
public void mouseClicked(MouseEvent m) {
if (m.getButton() == m.BUTTON1) {
mouse[2]=3;
}
if (m.getButton() == m.BUTTON2) {
mouse[3]=3;
}
if (m.getButton() == m.BUTTON3) {
mouse[4]=3;
}
}
public void mouseReleased(MouseEvent m) {
if (m.getButton() == m.BUTTON1) {
mouse[2]=2;
}
if (m.getButton() == m.BUTTON2) {
mouse[3]=2;
}
if (m.getButton() == m.BUTTON3) {
mouse[4]=2;
}
}
public void mouseEntered(MouseEvent m) {
}
public void mouseExited(MouseEvent m) {
}
public void mouseWheelMoved(MouseWheelEvent w) {
mouse[3]=w.getWheelRotation();
}
public MyApp() {
super("MyApp");
//Do your stuff here...
//...
//...
setTitle("Image Picker");
requestFocus();
addMouseListener(this);
addMouseWheelListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1400,1000);
setResizable(true);
setVisible(true);
int gc=0;
Rectangle r;
while (true){
try {
Thread.sleep(33);
} catch(InterruptedException bug) {
Thread.currentThread().interrupt();
System.out.println(bug);
}
r=getComponents()[0].getBounds();
gc=gc+1;
if (gc==500) {
System.gc();
gc=0;
}
mouse[0]=MouseInfo.getPointerInfo().getLocation().x-getComponents()[0].getLocationOnScreen().x;
mouse[1]=MouseInfo.getPointerInfo().getLocation().y-getComponents()[0].getLocationOnScreen().y;
//Display labels
}
}
public static void main(String args[]){
new MyApp();
}
}
鼠标
阵列将是:
mouse[0] - mouse x pos
mouse[1] - mouse y pos
mouse[2] - left mouse button
mouse[3] - middle mouse button
mouse[4] - right mouse button
mouse[5] - mouse wheel rotation, 0 if none, else -n to n
检查点(鼠标)是否位于矩形(标签)上方应该很容易。如果您不知道如何获取标签的位置,只需使用以下代码:
Rectangle r=getComponents()[1+n].getBounds();
//r.x, r.y, r.width, r.height
希望它能帮助您!有什么问题吗?很抱歉没有澄清。它不允许我将JLabel l添加到MouseListener中,为您的MouseListener创建一个内部类,例如MyMouseListener,然后实现它的abtract方法。在for循环中,l.addMouseListener(新的MyMouseListener());还要看一下Oracle的文档:如果我错了,请纠正我,但它说:类ImageViewerFrame扩展了JFrame实现了MouseListener,所以我实现了MouseListener@StackOverFlowUser1997,代码中的“this”指的是ActionListener类,而不是ImageViewerFrame
类。请尝试使用“ImageViewerFrame.this”作为参数。(“ImageViewerFrame.this”作为参数。)到目前为止看起来不错。我仍在测试。。如果问题已解决,将向您报告。问题已解决。感谢所有人的贡献和快速帮助。是否要发布工作代码?注释中的格式不太好
Rectangle r=getComponents()[1+n].getBounds();
//r.x, r.y, r.width, r.height