Swing Einbau MouseListener in JPanel

javapklein

Mitglied
In meiner Anwendung möchte ich gerne eine Mausbedienung einbauen. Ich kann ein panelAnzeige mit Neu erzeugen auf einem Gridlayout 4x6. In den einzelnen Feldern können Bilder oder leere Felder angezeigt werden (zufällig). Jetzt sollen die Namen der Bilddateien angezeigt werden, wenn mit der Maus darüber gefahren wird. Da ich bisher sehr wenig Erfahrung in grafischer Oberfläche habe, bin ich über jeden Tipp (wenn möglich mit Code) dankbar. Ich hoffe in meinem bisherigen Code ist eine Implementierung überhaupt möglich.
Java:
public class Simcity2 extends JFrame {
	private JButton buttonNeu, buttonSpeichern, buttonLaden;
	private JPanel panelButton, panelAnzeige;
	private int[] bilder; 
	private String[] bildSpeicher;
	private JTextArea ta = new JTextArea();
	public Simcity2(){
		panelButton = new JPanel(new GridLayout(1,3,30,1));		
		setTitle("           Simcity           ");	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(10, 5, 1000, 700);		
		buttonNeu = new JButton("Neu");
		add(buttonNeu);
		buttonSpeichern = new JButton("Speichern");
		add(buttonSpeichern);
		buttonLaden = new JButton("Laden");
		add(buttonLaden);
		panelButton.add(buttonNeu);
        panelButton.add(buttonSpeichern);
        panelButton.add(buttonLaden);
        getContentPane().add(BorderLayout.NORTH, panelButton);            
		setVisible(true);
		ta = new JTextArea();
				
		buttonNeu.addActionListener(new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
            	File dir = new File("images128");		
            	gebaeudeInit();
                gebaeudeAnzeigen(dir);  
            }
        });	
		buttonSpeichern.addActionListener(new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
                   gebaeudeSpeichern();  
            }
        });	
		buttonLaden.addActionListener(new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
                   gebaeudeLaden();  
            }
        });	
		if (ta != null)
			add(ta);		
	}	
	
	public void gebaeudeInit() {		
		bilder = new int[24];
		bildSpeicher = new String[24];
		vorbelegen(bilder);		
	}
	public void gebaeudeAnzeigen(File dir) {
		int count = 0;
		panelAnzeige = new JPanel(new GridLayout(4,6,1,1));
								
		while (true) {		
			for (File file : dir.listFiles()) {
				if (file.isFile()) {
					String name = file.getName();
					ImageIcon icon = new ImageIcon("images128/" + name);	
					JLabel jicon = new JLabel(icon);
					if (bilder[count] == 0) {
						panelAnzeige.add(new JPanel());
						bildSpeicher[count] = "Leer";
					}
					else {
						panelAnzeige.add(jicon);
						bildSpeicher[count] = file.getName();
					}
					count++;
					if (count == 24) break;
				}
			}
			if (count == 24) break;	
		}
		getContentPane().add(BorderLayout.CENTER, panelAnzeige);
		validate();
		}	
	public void vorbelegen(int[] bilder) {
		Random rm = new Random();
		int zzahl = rm.nextInt(23) + 1; 
		int zzahl1 = zzahl;
		for (;;) {
			if (zzahl1 == 0)
				break;
			else { 
				zzahl = rm.nextInt(23) + 1;
				if (bilder[zzahl] == 0) {
					bilder[zzahl] = 1;
					zzahl1--;
				}				
			}				
		}			
	}
	public void gebaeudeSpeichern() {
		ta.setText("");
				
		if (panelAnzeige != null) {			
			try {
				ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("simcity.stadt"));
				stream.writeObject(bildSpeicher);
				stream.close();
				ta.setText("Speichern von simcity.stadt erfolgreich.");
				
			} catch (Exception e) {
				ta.setText("Speichern nicht möglich. " + e.getMessage());			
			}
		}
		else
			ta.setText("Kein Inhalt, daher speichern nicht möglich.");	
	}	
	
	public void gebaeudeLaden() {
		try {
			ObjectInputStream stream = new ObjectInputStream(new FileInputStream("simcity.stadt"));
			bildSpeicher = (String[])stream.readObject();
			stream.close();
			panelAnzeige = new JPanel(new GridLayout(4,6,1,1));
			panelAnzeige = aufbauBilder(panelAnzeige, bildSpeicher);
			getContentPane().add(BorderLayout.CENTER, panelAnzeige);
			validate();
		}
		catch (Exception e) {
			ta.setText("Laden nicht möglich. " + e.getMessage());
			}
	}		
	
	public JPanel aufbauBilder(JPanel panel, String[] bilder) {
		for (int i = 0; i < bilder.length; i++) {
			ImageIcon icon = new ImageIcon("images128/" + bilder[i]);	
			JLabel jicon = new JLabel(icon);
			if (bilder[i] == "Leer") {
				panelAnzeige.add(new JPanel());
			}
			else {
				panelAnzeige.add(jicon);
			}			
		}
		return panelAnzeige;		
	}

	public static void main(String[] args) {
		Simcity2 sc = new Simcity2();	
	}
}
 

VfL_Freak

Top Contributor
Moin,

würde es nicht einfach reichen, den jeweiligen Lable einen ToolTiptext zuzuordnen mit dem Inhalt des jeweiligen Dateinamens ???:L

Gruß
Klaus
 
V

vanny

Gast
Wie schon von meinem Vorredner gesagt, das gibt es fertig für SwingComponents.
mit der Methode
Code:
setToolTipText("Hier zBsp. der Dateiname");
kannst du das einfach setzen.

Gruß Vanny
 

javapklein

Mitglied
Ich habe den Versuch gemacht das umzusetzen. Aber anscheinend stimmt bei mir etwas nicht.
Es erscheint keine Anzeige des Dateinamens, wenn ich mit der Maus darüber fahre.
Was habe ich falsch gemacht bzw. was fehlt mir noch. Zeile 66 und 136.:(
Java:
public class Simcity2 extends JFrame {
	private JButton buttonNeu, buttonSpeichern, buttonLaden;
	private JPanel panelButton, panelAnzeige;
	private int[] bilder; 
	private String[] bildSpeicher;
	private JTextArea ta = new JTextArea();
	public Simcity2(){
		panelButton = new JPanel(new GridLayout(1,3,30,1));		
		setTitle("           Simcity           ");	
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(10, 5, 1000, 700);		
		buttonNeu = new JButton("Neu");
		add(buttonNeu);
		buttonSpeichern = new JButton("Speichern");
		add(buttonSpeichern);
		buttonLaden = new JButton("Laden");
		add(buttonLaden);
		panelButton.add(buttonNeu);
        panelButton.add(buttonSpeichern);
        panelButton.add(buttonLaden);
        getContentPane().add(BorderLayout.NORTH, panelButton);            
		setVisible(true);
		ta = new JTextArea();
				
		buttonNeu.addActionListener(new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
            	File dir = new File("images128");		
            	gebaeudeInit();
                gebaeudeAnzeigen(dir);  
            }
        });	
		buttonSpeichern.addActionListener(new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
                   gebaeudeSpeichern();  
            }
        });	
		buttonLaden.addActionListener(new ActionListener() {              
            public void actionPerformed(ActionEvent e) {
                   gebaeudeLaden();  
            }
        });	
		if (ta != null)
			add(ta);		
	}	
	
	public void gebaeudeInit() {		
		bilder = new int[24];
		bildSpeicher = new String[24];
		vorbelegen(bilder);		
	}
	public void gebaeudeAnzeigen(File dir) {
		int count = 0;
		panelAnzeige = new JPanel(new GridLayout(4,6,1,1));
								
		while (true) {		
			for (File file : dir.listFiles()) {
				if (file.isFile()) {
					String name = file.getName();
					ImageIcon icon = new ImageIcon("images128/" + name);	
					JLabel jicon = new JLabel(icon);
					if (bilder[count] == 0) {
						panelAnzeige.add(new JPanel());
						bildSpeicher[count] = "Leer";
					}
					else {
						panelAnzeige.setToolTipText("images128/" + name);
						panelAnzeige.add(jicon);
						bildSpeicher[count] = file.getName();
					}
					count++;
					if (count == 24) break;
				}
			}
			if (count == 24) break;	
		}
		getContentPane().add(BorderLayout.CENTER, panelAnzeige);
		validate();
		}	
	public void vorbelegen(int[] bilder) {
		Random rm = new Random();
		int zzahl = rm.nextInt(23) + 1; 
		int zzahl1 = zzahl;
		for (;;) {
			if (zzahl1 == 0)
				break;
			else { 
				zzahl = rm.nextInt(23) + 1;
				if (bilder[zzahl] == 0) {
					bilder[zzahl] = 1;
					zzahl1--;
				}				
			}				
		}			
	}
	public void gebaeudeSpeichern() {
		ta.setText("");
				
		if (panelAnzeige != null) {			
			try {
				ObjectOutputStream stream = new ObjectOutputStream(new FileOutputStream("simcity.stadt"));
				stream.writeObject(bildSpeicher);
				stream.close();
				ta.setText("Speichern von simcity.stadt erfolgreich.");
				
			} catch (Exception e) {
				ta.setText("Speichern nicht möglich. " + e.getMessage());			
			}
		}
		else
			ta.setText("Kein Inhalt, daher speichern nicht möglich.");	
	}	
	
	public void gebaeudeLaden() {
		try {
			ObjectInputStream stream = new ObjectInputStream(new FileInputStream("simcity.stadt"));
			bildSpeicher = (String[])stream.readObject();
			stream.close();
			panelAnzeige = new JPanel(new GridLayout(4,6,1,1));
			panelAnzeige = aufbauBilder(panelAnzeige, bildSpeicher);
			getContentPane().add(BorderLayout.CENTER, panelAnzeige);
			validate();
		}
		catch (Exception e) {
			ta.setText("Laden nicht möglich. " + e.getMessage());
			}
	}		
	
	public JPanel aufbauBilder(JPanel panel, String[] bilder) {
		for (int i = 0; i < bilder.length; i++) {
			ImageIcon icon = new ImageIcon("images128/" + bilder[i]);	
			JLabel jicon = new JLabel(icon);
			if (bilder[i] == "Leer") {
				panelAnzeige.add(new JPanel());
			}
			else {
				panelAnzeige.setToolTipText("images128/" + bilder[i]);
				panelAnzeige.add(jicon);
			}			
		}
		return panelAnzeige;		
	}

	public static void main(String[] args) {
		Simcity2 sc = new Simcity2();	
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
ExceptionOfExpectation MouseListener-Objekte zu den Graphics-Objekten einfügen AWT, Swing, JavaFX & SWT 3
R Punkt von MouseListener hat falsche Koordinate AWT, Swing, JavaFX & SWT 2
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
G vorgefertigte Buttons oder neue Komponente mit MouseListener? AWT, Swing, JavaFX & SWT 0
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
D Event Handling MouseListener funktioniert seit Java 8 nicht mehr AWT, Swing, JavaFX & SWT 13
M MouseListener auf table oder scrollPane AWT, Swing, JavaFX & SWT 11
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
D Swing &MouseListener in einem JFrame, sinnig? AWT, Swing, JavaFX & SWT 11
U MouselIstener zu JFrame AWT, Swing, JavaFX & SWT 6
F Swing MouseListener im JPanel AWT, Swing, JavaFX & SWT 3
J Swing Button mit JTable und MouseListener AWT, Swing, JavaFX & SWT 8
F JPanel + MouseListener AWT, Swing, JavaFX & SWT 5
JavaInBrain Swing Rückgabe aus MouseListener-Klasse AWT, Swing, JavaFX & SWT 3
A SWT SWT Scale und MouseListener AWT, Swing, JavaFX & SWT 7
J MouseListener und rechte Maustaste AWT, Swing, JavaFX & SWT 3
R MouseListener auf JPanel AWT, Swing, JavaFX & SWT 3
Q Swing MouseListener auf JTable geht nicht AWT, Swing, JavaFX & SWT 2
N Mit MouseListener X-Y Angaben vom Bild erfahren AWT, Swing, JavaFX & SWT 3
T MouseListener an Ecken von Polygonen hinzufügen AWT, Swing, JavaFX & SWT 5
H Swing JPanel in JTable mit MouseListener AWT, Swing, JavaFX & SWT 3
A Individueller MouseListener ? AWT, Swing, JavaFX & SWT 7
B MouseListener im Renderer einer JComboBox AWT, Swing, JavaFX & SWT 3
P AWT MouseListener unklare abhandlung von Events AWT, Swing, JavaFX & SWT 3
M MouseListener/MouseMotionListener AWT, Swing, JavaFX & SWT 2
njans SWT MouseListener exited AWT, Swing, JavaFX & SWT 4
danx066 MouseListener macht was er will AWT, Swing, JavaFX & SWT 14
K MouseListener für Objekte auf einem Frame AWT, Swing, JavaFX & SWT 4
P JLabel Farbe/Bild ändern aus MouseListener heraus AWT, Swing, JavaFX & SWT 3
U Swing Generierung mehrerer Kreise per MouseListener AWT, Swing, JavaFX & SWT 16
Semox Swing JApplet: Problem MouseListener Anmeldung AWT, Swing, JavaFX & SWT 3
C JTappedPane Mouselistener auf Überschrift Registerkarte AWT, Swing, JavaFX & SWT 2
M MouseListener AWT, Swing, JavaFX & SWT 3
K AWT MouseListener linke und rechte Maustaste AWT, Swing, JavaFX & SWT 5
C Swing MouseListener Doppelklick-Geschwindigkeit AWT, Swing, JavaFX & SWT 4
N Swing MouseListener in JTable AWT, Swing, JavaFX & SWT 4
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
Developer_X AWT Component added keinen MouseListener AWT, Swing, JavaFX & SWT 7
R MouseListener wird nicht aufgerufen AWT, Swing, JavaFX & SWT 3
P JComboBox und MouseListener AWT, Swing, JavaFX & SWT 2
W MouseListener im editable ComboBox AWT, Swing, JavaFX & SWT 14
raptorrs Swing MouseListener reagiert nicht auf Instanz einer JTable AWT, Swing, JavaFX & SWT 6
multiholle Swing Mouselistener auf Parentpanel immer aktiv AWT, Swing, JavaFX & SWT 7
C MouseListener und ActionListener kombinieren AWT, Swing, JavaFX & SWT 17
M Komponenten einer unbestimmten Anzahl und MouseListener AWT, Swing, JavaFX & SWT 4
A MouseListener funktionert nie AWT, Swing, JavaFX & SWT 12
C Probleme mit Größe und mit MouseListener AWT, Swing, JavaFX & SWT 2
W MouseListener für jede Zelle einer JTable AWT, Swing, JavaFX & SWT 4
E MouseListener Problem AWT, Swing, JavaFX & SWT 4
D jButton mit ImageIcon & MouseListener AWT, Swing, JavaFX & SWT 5
S MouseListener zurückverfolgung auf element. AWT, Swing, JavaFX & SWT 7
B MouseListener / doppelklick geht net AWT, Swing, JavaFX & SWT 16
M JCheckBox Standard MouseListener entfernen AWT, Swing, JavaFX & SWT 13
hdi Wie mach ich diesen MouseListener AWT, Swing, JavaFX & SWT 4
G MouseListener & KeyListener AWT, Swing, JavaFX & SWT 4
H JComboBox reagiert nicht auf MouseListener AWT, Swing, JavaFX & SWT 5
2 Mouselistener AWT, Swing, JavaFX & SWT 2
W MouseListener, getClickCount und Doppelklick AWT, Swing, JavaFX & SWT 6
S swing komponenten mit mouselistener rotieren AWT, Swing, JavaFX & SWT 15
G JFrame,JLabel,MouseListener AWT, Swing, JavaFX & SWT 6
F Wie MouseListener bei TableModel anmelden? AWT, Swing, JavaFX & SWT 3
V Frage zu MouseListener --> mousePressed() AWT, Swing, JavaFX & SWT 5
C MouseListener für Spalte eines JTables AWT, Swing, JavaFX & SWT 4
K Problem mit 2 MouseListener. AWT, Swing, JavaFX & SWT 3
M MouseMotionListener oder mouseListener AWT, Swing, JavaFX & SWT 6
T JComboBox und MouseListener AWT, Swing, JavaFX & SWT 11
F MouseListener - Unhandled IOException AWT, Swing, JavaFX & SWT 5
padde479 Statusleiste mit MouseListener aktualisieren AWT, Swing, JavaFX & SWT 3
L Problem mit MouseListener, AdjustmentListener AWT, Swing, JavaFX & SWT 6
T MouseListener Problem AWT, Swing, JavaFX & SWT 3
F Mouselistener wird wiederholt aufgerufen AWT, Swing, JavaFX & SWT 3
G Frage zu MouseListener und speichern des Wertes (reflektion? AWT, Swing, JavaFX & SWT 6
B frage zu MouseListener AWT, Swing, JavaFX & SWT 5
O MouseListener - Wert-Übergabe AWT, Swing, JavaFX & SWT 3
W JPanel, JLabel und MouseListener -> auf clicks reagieren AWT, Swing, JavaFX & SWT 5
S MouseListener auf einem einzelnen Tab setzen AWT, Swing, JavaFX & SWT 3
B MouseListener & Fenster schliessen AWT, Swing, JavaFX & SWT 3
G MouseListener AWT, Swing, JavaFX & SWT 4
G Tooltip sperrt MouseListener? AWT, Swing, JavaFX & SWT 6
S JComboBox und MouseListener AWT, Swing, JavaFX & SWT 5
D Koordinaten der Bildschirmposition auslesen (MouseListener?) AWT, Swing, JavaFX & SWT 7
A Klassenübergreifend MouseListener verwenden AWT, Swing, JavaFX & SWT 14
N "globaler" MouseListener (+MouseMotionListener) AWT, Swing, JavaFX & SWT 4
M ToolTipText für JTable mit MouseListener ohne anklicken? AWT, Swing, JavaFX & SWT 7
A MouseListener auf Bild legen ? AWT, Swing, JavaFX & SWT 16
S Mouselistener erzeugt kein Event in einem Menuitem AWT, Swing, JavaFX & SWT 2
J MouseListener AWT, Swing, JavaFX & SWT 3
A JPanels in JPanel und MouseListener AWT, Swing, JavaFX & SWT 3
C Mehrere MouseListener? AWT, Swing, JavaFX & SWT 7
U Keylistener und Mouselistener AWT, Swing, JavaFX & SWT 2
L Event-handling, MouseListener AWT, Swing, JavaFX & SWT 5
T Problem mit MouseListener bei JButton AWT, Swing, JavaFX & SWT 5
K mein keyListener scheint Konflict haben mit mouseListener AWT, Swing, JavaFX & SWT 6
G Problem mit MouseListener AWT, Swing, JavaFX & SWT 9
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben