Liebe Java-Gemeinde,
Beim Programmieren eines Listeners für eine CheckBox bin ich am Verzweifeln...
Der Listener bekommt zwar natürlich die Änderungen an der Box mit, jedoch führt er einfach alle If-Zweige aus und wählt die CheckBox danach wieder ab! Das heißt nach einem Klick darauf bleibt der Haken nicht sichtbar, er wird einen Wimpernschlag eingesetzt, dann werden alle If-Zweige ausgeführt und dann ist er wieder verschwunden....
Entferne ich aber die Anweisungen im Listener, also:
Passiert beim Anwählen natürlich auch nichts, aber wenigstens bleibt der Haken drin!
Was kann das sein?
Hier mal das komplette Listing....
Danke schon mal! 🙂
Beim Programmieren eines Listeners für eine CheckBox bin ich am Verzweifeln...
Der Listener bekommt zwar natürlich die Änderungen an der Box mit, jedoch führt er einfach alle If-Zweige aus und wählt die CheckBox danach wieder ab! Das heißt nach einem Klick darauf bleibt der Haken nicht sichtbar, er wird einen Wimpernschlag eingesetzt, dann werden alle If-Zweige ausgeführt und dann ist er wieder verschwunden....
Entferne ich aber die Anweisungen im Listener, also:
Java:
@Override
public void itemStateChanged(ItemEvent e){
if(e.getSource() instanceof JCheckBox){
}
}
Passiert beim Anwählen natürlich auch nichts, aber wenigstens bleibt der Haken drin!
Was kann das sein?
Hier mal das komplette Listing....
Danke schon mal! 🙂
Java:
package de.fernschulen.bildbetrachter;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
public class Bildbetrachter extends JFrame{
//automatisch �ber Eclipse erg�nzt
private static final long serialVersionUID = 5926848670766709720L;
//f�r die Schaltfl�chen
private JButton oeffnen, beenden, oeffnenSchau, beendenSchau;
//f�r die Eingabe
private JTextField eingabe;
//f�r die Anzeige
private BildPanel bildAnzeige, bildAnzeigeSchau;
//f�r die Anpassung
private JCheckBox skalieren;
//die innere Klasse mit dem Listener
class MeinListener implements ActionListener, ItemListener { //Den Listener für die Checkbox mit einem ItemListener erweitern
@Override
public void actionPerformed(ActionEvent e) {
//f�r die Schaltfl�chen zum Beenden
if (e.getActionCommand().equals("Ende"))
System.exit(0);
//f�r die Auswahl eines einzelnen Bildes
if (e.getActionCommand().equals("Laden"))
bildLaden();
//f�r die Auswahl der Bilder f�r die Bilderschau
if (e.getActionCommand().equals("LadenSchau"))
bilderSchau();
}
@Override
public void itemStateChanged(ItemEvent e){
if(e.getSource() instanceof JCheckBox){
if(skalieren.isSelected() == true){
JOptionPane.showMessageDialog(null, "Gewählt");
}
else
JOptionPane.showMessageDialog(null, "Nicht gewählt");
}
}
}
//der Konstruktor
public Bildbetrachter(String titel) {
super(titel);
initGUI();
}
//die Methode zum Erstellen der Oberfl�che
private void initGUI() {
//die Panels f�r die Register
JPanel registerEinzel = new JPanel();
JPanel registerSchau = new JPanel();
//das TabbedPane
JTabbedPane panelKomplett = new JTabbedPane();
//das Register f�r die Einzelanzeige
//eine neue Instanz f�r das Panel mit der Grafik erzeugen
bildAnzeige = new BildPanel();
//die Komponenten erstellen und einbauen
registerEinzel.setLayout(new FlowLayout(FlowLayout.LEFT));
registerEinzel.add(bildAnzeige);
oeffnen = new JButton("Bild laden");
beenden = new JButton("Beenden");
oeffnen.setActionCommand("Laden");
beenden.setActionCommand("Ende");
eingabe = new JTextField(20);
skalieren = new JCheckBox("Anpassen");
registerEinzel.add(new JLabel("Bilddatei: "));
registerEinzel.add(eingabe);
registerEinzel.add(skalieren);
registerEinzel.add(oeffnen);
registerEinzel.add(beenden);
//die Listener verbinden
MeinListener listener = new MeinListener();
oeffnen.addActionListener(listener);
beenden.addActionListener(listener);
skalieren.addItemListener(listener); //Die Checkbox mit dem Listener verbinden
//das Register f�r die Bilderschau
//eine neue Instanz f�r das Panel mit der Grafik erzeugen
bildAnzeigeSchau = new BildPanel();
//die Komponenten erstellen und einbauen
registerSchau.setLayout(new FlowLayout(FlowLayout.LEFT));
registerSchau.add(bildAnzeigeSchau);
oeffnenSchau = new JButton("Bilder laden");
beendenSchau = new JButton("Beenden");
oeffnenSchau.setActionCommand("LadenSchau");
//die Schaltfl�che zum Beenden bekommt dasselbe ActionCommand wie im anderen Register
beendenSchau.setActionCommand("Ende");
registerSchau.add(oeffnenSchau);
registerSchau.add(beendenSchau);
//die Listener verbinden
oeffnenSchau.addActionListener(listener);
beendenSchau.addActionListener(listener);
//und nun alles zusammenbauen
panelKomplett.add("Einzelbild",registerEinzel);
panelKomplett.add("Bilderschau",registerSchau);
add(panelKomplett);
//Gr��e setzen, anzeigen, keine Gr��en�nderungen zulassen und Standard-Verhalten festlegen
setSize(350,450);
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
//die Methode zum Laden eines Bildes �ber den Dialog
private void bildLaden() {
//einen Standard-�ffnen-Dialog erzeugen
BildbetrachterDialog dialog = new BildbetrachterDialog();
//die R�ckgabe holen
String datei = dialog.dialogZeigen();
//wenn eine Datei ausgew�hlt wurde, laden
if (datei != null) {
bildAnzeige.grafikLaden(datei, skalieren.isSelected());
//den Namen der Datei im Eingabefeld anzeigen
eingabe.setText(datei);
}
}
//die Methode zur Anzeige der Bilderschau
private void bilderSchau() {
//einen Standard-�ffnen-Dialog erzeugen
BildbetrachterDialog dialogSchau = new BildbetrachterDialog();
//die R�ckgabe holen und in einem Array vom Typ File ablegen
File[] dateien = dialogSchau.dialogZeigenMehrere();
//wenn eine Datei ausgew�hlt wurde, alle Dateien nacheinander anzeigen
if (dateien != null) {
for (File datei: dateien) {
bildAnzeigeSchau.grafikLaden(datei.toString(), true);
//nach jeder Datei machen wir eine kurze Pause
try {
Thread.sleep(5000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
Zuletzt bearbeitet: