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: