1. Poster hier!Fügen Sie JLabel zu MouseListener hinzu
Ich arbeite an einem Java Photo Viewer Gallery. Ich möchte alle Labels aus einer ArrayList zu einem MouseListener hinzufügen. So kann ich das Bild öffnen, auf das der Benutzer in einem neuen großen Fenster geklickt hat.
Ich habe eine Dateiauswahl, wo der Benutzer i Anzahl der Bilder auswählen kann. Ich skalierte sie und legte sie in eine:
ArrayList skaliert = new ArrayList();
Fehler: Die Methode addMouseListener (Mouselistener) in der Art Komponente ist nicht anwendbar für die Argumente (neue Action() {})
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
}
Der vollständige Code zu benutzen versucht:
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
}
}
Was ist das Problem, bitte? – user7185318
Entschuldigung für die Unklarheit. Es lässt mich das JLabel l dem MouseListener nicht hinzufügen – StackOverFlowUser1997
Versuchen Sie, eine innere Klasse für Ihren MouseListener zu schaffen, etwas wie MyMouseListener dann implementiert seine abtract Methoden. In Ihrer for-Schleife l.addMouseListener (new MyMouseListener()); Schauen Sie sich auch die Dokumentation von Oracle an: [MouseListener] (http://docs.oracle.com/javase/tutorial/uiswing/events/mouselistener.html) –