gpt4 book ai didi

java - 将 JLabel 添加到 MouseListener

转载 作者:行者123 更新时间:2023-12-01 08:57:58 25 4
gpt4 key购买 nike

这里是第一次海报!

我正在开发一个Java 照片查看器库。我想将 ArrayList 中的所有标签添加到 MouseListener。这样我就可以在新的大窗口中打开用户单击的图片。

我有一个文件选择器,用户可以在其中选择 i 张图片。我缩放了它们并将它们放入:

ArrayList 缩放 = new ArrayList();

错误:Component 类型中的方法 addMouseListener(MouseListener) 不适用于参数 (new ActionListener(){})

我尝试使用

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

}

完整的代码是:

import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Label;
import java.awt.List;
import java.awt.event.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;

import javax.swing.*;




public class ImageViewer {

public static void main(String[] args) {

JFrame frame = new ImageViewerFrame();
frame.setTitle("PhotoViewer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}

}



@SuppressWarnings("serial")
class ImageViewerFrame extends JFrame implements MouseListener{
JLabel label;
JFileChooser chooser;
JMenuBar menubar;
JMenu menu;
JMenuItem menuitem;

JPanel panel = new JPanel();
// JLabel l1= new JLabel("First");
// JLabel l2= new JLabel("Second");
// JLabel l3= new JLabel("Third");
// JLabel l4= new JLabel("Fourth");




public ArrayList<File> images = new ArrayList <File>();

public ImageViewerFrame() {
setSize(500,500);

panel.setLayout(new GridLayout(0,5));

label = new JLabel();
add(label);
add(panel);
JButton test = new JButton ("TEST");
test.addMouseListener(this);
panel.add(test);
panel.setVisible(true);
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));
chooser.setMultiSelectionEnabled(true);
menubar = new JMenuBar();
setJMenuBar(menubar);

menu = new JMenu("File");
menubar.add(menu);

menuitem = new JMenuItem("Open");
menu.add(menuitem);
ArrayList<ImageIcon> AL = new ArrayList<ImageIcon>();

ArrayList<Image> scaled = new ArrayList<Image>();




menuitem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event){

int result = chooser.showOpenDialog(null);

if(result == JFileChooser.APPROVE_OPTION) {

//label.setIcon(new ImageIcon(name));

File[] f = chooser.getSelectedFiles();

for(int i=0; i< f.length; i++)
{
images.add(f[i]);
ImageIcon imageicon = new ImageIcon(f[i].toString());
AL.add(imageicon);

}

for (ImageIcon x : AL){
System.out.println(x);
Image image = x.getImage();
Image newimg = image.getScaledInstance(120,120, java.awt.Image.SCALE_SMOOTH);
scaled.add(newimg);
}


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);


}




}
}
});




}






@Override
public void mouseClicked(MouseEvent arg0) {


}







@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}







@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}







@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}







@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}

}

最佳答案

It wont let me add the JLabel l to the MouseListener

首先,您不要向 MouseListener 添加标签。您将 MouseListener 添加到标签。您没有实现 MouseListener 接口(interface),因此会出现编译错误。您需要实现所有方法(mousePressed、mouseReleased ...)。

阅读 Swing 教程中有关如何编写 MouseListener 的部分以获取工作示例。

此外,一旦 MouseListener 开始工作,您就不需要创建两个标签。基本代码可能类似于:

JLabel l = new JLabel(new ImageIcon(scaled.get(i)));
label.addMouseListener(this); //<- Compiler Error
panel.add( label );

最后,您可能需要考虑使用 JList 来显示图标。它更有效,因为它只渲染图像。然后,您可以使用 ListSelectionListener 在选择图像时进行处理。阅读 Swing 教程中关于 How to Use Lists 的部分了解更多信息。

关于java - 将 JLabel 添加到 MouseListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41911703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com