Hallo Leute, habe ein hoffe ich kleines Problem wobei ihr mir helfen könntet.
Ich versuche über ein Drehfeld die Anzeigendauer der Diashow einzustellen.
Bisher hatte das Programm auch gut funktioniert, leider seit ich es mit dem JSpinner
etwas verfeinern wollte haut es nicht mehr hin. ;(
Bekomme einfach den Wert des Drehfeldes nicht korrekt abgefragt, da ich immer den Fehler bekomme ,kann Objekt nicht nach Int wandeln.
Möchte den Wert dann mit einer If Schleife abfragen und so entsprechende Millisekunden für die Diapause Festlegen.
[Java]
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
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;
// Drehfeld für die Zeitspanne
private JSpinner zeitschalter;
// Variable für die Sekunden
private int anzeigenDauer;
int sekunden;
//die innere Klasse mit dem Listener
class MeinListener implements ActionListener, ChangeListener {
@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();
//Grundeinstellung für die Pause bei der Bilderschau in Millisekunden
anzeigenDauer = 5000;
// Grundeinstellung Sekundenanzeige des Drehfeldes
sekunden = 5;}
// Reaktion auf Statuswechsel in dem Drehfeld
@Override
public void stateChanged(ChangeEvent e) {
if (e.getSource()instanceof JSpinner){
int sekunden = (int) zeitschalter.getValue;{
if (sekunden == 1){
anzeigenDauer = 1000;}
if (sekunden == 2){
anzeigenDauer = 2000;}
if (sekunden == 3){
anzeigenDauer = 3000;}
if (sekunden == 4){
anzeigenDauer = 4000;}
if (sekunden == 5){
anzeigenDauer = 5000;}
if (sekunden == 6){
anzeigenDauer = 6000;}
if (sekunden == 7){
anzeigenDauer = 7000;}
if (sekunden == 8){
anzeigenDauer = 8000;}
if (sekunden == 9){
anzeigenDauer = 9000;}
if (sekunden == 10){
anzeigenDauer = 10000;}
}
}
}
}
//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);
//zeitschalter.addChangeListener(listener);
//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");
// Variable setzen für zeitschalter Drehfeld
SpinnerNumberModel drehFeldModel = new SpinnerNumberModel(5,0,10,1);
zeitschalter = new JSpinner(drehFeldModel);
//die Schaltfläche zum Beenden bekommt dasselbe ActionCommand wie im anderen Register
beendenSchau.setActionCommand("Ende");
registerSchau.add(oeffnenSchau);
registerSchau.add(beendenSchau);
registerSchau.add(zeitschalter);
//die Listener verbinden
oeffnenSchau.addActionListener(listener);
beendenSchau.addActionListener(listener);
zeitschalter.addChangeListener(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(anzeigenDauer);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
[/Java]
Hilfe wäre echt Super
Ich versuche über ein Drehfeld die Anzeigendauer der Diashow einzustellen.
Bisher hatte das Programm auch gut funktioniert, leider seit ich es mit dem JSpinner
etwas verfeinern wollte haut es nicht mehr hin. ;(
Bekomme einfach den Wert des Drehfeldes nicht korrekt abgefragt, da ich immer den Fehler bekomme ,kann Objekt nicht nach Int wandeln.
Möchte den Wert dann mit einer If Schleife abfragen und so entsprechende Millisekunden für die Diapause Festlegen.
[Java]
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
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;
// Drehfeld für die Zeitspanne
private JSpinner zeitschalter;
// Variable für die Sekunden
private int anzeigenDauer;
int sekunden;
//die innere Klasse mit dem Listener
class MeinListener implements ActionListener, ChangeListener {
@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();
//Grundeinstellung für die Pause bei der Bilderschau in Millisekunden
anzeigenDauer = 5000;
// Grundeinstellung Sekundenanzeige des Drehfeldes
sekunden = 5;}
// Reaktion auf Statuswechsel in dem Drehfeld
@Override
public void stateChanged(ChangeEvent e) {
if (e.getSource()instanceof JSpinner){
int sekunden = (int) zeitschalter.getValue;{
if (sekunden == 1){
anzeigenDauer = 1000;}
if (sekunden == 2){
anzeigenDauer = 2000;}
if (sekunden == 3){
anzeigenDauer = 3000;}
if (sekunden == 4){
anzeigenDauer = 4000;}
if (sekunden == 5){
anzeigenDauer = 5000;}
if (sekunden == 6){
anzeigenDauer = 6000;}
if (sekunden == 7){
anzeigenDauer = 7000;}
if (sekunden == 8){
anzeigenDauer = 8000;}
if (sekunden == 9){
anzeigenDauer = 9000;}
if (sekunden == 10){
anzeigenDauer = 10000;}
}
}
}
}
//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);
//zeitschalter.addChangeListener(listener);
//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");
// Variable setzen für zeitschalter Drehfeld
SpinnerNumberModel drehFeldModel = new SpinnerNumberModel(5,0,10,1);
zeitschalter = new JSpinner(drehFeldModel);
//die Schaltfläche zum Beenden bekommt dasselbe ActionCommand wie im anderen Register
beendenSchau.setActionCommand("Ende");
registerSchau.add(oeffnenSchau);
registerSchau.add(beendenSchau);
registerSchau.add(zeitschalter);
//die Listener verbinden
oeffnenSchau.addActionListener(listener);
beendenSchau.addActionListener(listener);
zeitschalter.addChangeListener(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(anzeigenDauer);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
[/Java]
Hilfe wäre echt Super