Verschiedene Bilder per Knopfdruck anzeigen lassen

Lanifee

Mitglied
Hallo =)
Ich bin neu hier und habe noch nicht so viel Erfahrung im Programmieren. Allerdings habe ich die Aufgabe ein kleines Spiel zu programmieren.
Dafür lasse ich mir ein Bild im JFrame anzeigen. Ich hab vier Knöpfe und möchte, dass sich das Bild bei jedem Knopfdruck ändert. Ich bin jetzt soweit, dass ich das Programm starten kann und wenn ich einen Knopf drücke ändert sich auch das Bild, aber danach passiert nichts mehr. Wenn sich das Bild einmal geändert hat, bleibt es dabei und die Knöpfe reagieren nicht mehr.

Ich versuche jetzt einmal meinen Code einzufügen. Es wäre wirklich super, wenn mir jemand helfen könnte.

Ich bedanke mich im Voraus für jede Antwort!

Liebe Grüße!

package hundi;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Tama {

public static void main(String[] args) {

JFrame tam = new JFrame("Mein Tamagotchi");
tam.setSize(1000, 800);
tam.setLocation(315, 6);

JButton eins = new JButton("füttern");
eins.setBounds(60, 500, 100, 20);
tam.add(eins);

JButton zwei = new JButton("spielen");
zwei.setBounds(60, 550, 100, 20);
tam.add(zwei);

JButton drei = new JButton("schlafen");
drei.setBounds(60, 600, 100, 20);
tam.add(drei);

JButton vier = new JButton("waschen");
vier.setBounds(60, 650, 100, 20);
tam.add(vier);

// JButton neu = new JButton("zurück");
// neu.setBounds(60, 400, 100, 20);
// tam.add(neu);

JLabel hintergrundbild = new JLabel(
new ImageIcon("C:/Users/Lana/Desktop/Programmieren/Tamagotchi/Sitzend.jpg"));
tam.getContentPane().add(hintergrundbild);
hintergrundbild.setVisible(true);

tam.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tam.setVisible(true);

ActionListener schlafen = new ActionListener() {
public void actionPerformed(ActionEvent e) {
// JOptionPane.showMessageDialog(null, "Danke!");

hintergrundbild.setVisible(false);
JLabel bild = new JLabel(
new ImageIcon("C:/Users/Lana/Desktop/Programmieren/Tamagotchi/Liegend.jpg"));
tam.getContentPane().add(bild);
bild.setVisible(true);
}
};

ActionListener spielen = new ActionListener() {
public void actionPerformed(ActionEvent e) {

hintergrundbild.setVisible(false);
JLabel bildspiel = new JLabel(
new ImageIcon("C:/Users/Lana/Desktop/Programmieren/Tamagotchi/Spielend.jpg"));
tam.getContentPane().add(bildspiel);
bildspiel.setVisible(true);

}
};

// ActionListener back = new ActionListener() {
// public void actionPerformed(ActionEvent e) {

// hintergrundbild.setVisible(true);


drei.addActionListener(schlafen);
zwei.addActionListener(spielen);
// neu.addActionListener(back);
}
}
 
Zuletzt bearbeitet:
X

Xyz1

Gast
Hallo,

innerhalb von ActionListener bekommst du immer das gleiche Bild geschrieben, ändere das mal. ;)

lg
 

Lanifee

Mitglied
Hallo,

erstmal Danke für die Antwort.
Leider ist mir nicht so ganz klar, was ich ändern muss.
Ich habe versuche das erste Bild mit dem ActionListener auf Knopfdruck unsichtbar zu machen. Damit ein anderes Bild angezeigt werden kann.
Ich hab auch das Gefühl, dass sich meine Bilder immer gegenseitig überschreiben und nur das letze definierte Bild angezeigt wird. Aber ich weiß nicht genau, wie ich das ändern kann.

LG
 

Meniskusschaden

Top Contributor
innerhalb von ActionListener bekommst du immer das gleiche Bild geschrieben, ändere das mal.
Das kann ich nicht nachvollziehen. Zumindest für die Buttons zwei und drei sind es doch andere Bilder als das Startbild.

Ich denke das Hauptproblem ist, dass du bei jedem Button-Klick ein neues Bild erzeugst und hinzufügst. Du machst aber nur das ursprüngliche Startbild unsichtbar, aber nicht die Bilder, die zu den Buttons zwei und drei gehören.
 

Meniskusschaden

Top Contributor

Lanifee

Mitglied
@Meniskusschaden
ich hab schon versucht mit dem Button-Klick die anderen Bilder auch unsichtbar zu machen, aber dann funktioniert das Programm nicht mehr. :(
Ich hab auch über legt, die Bilder alle vor dem Button-Klick zu erzeugen. Aber dann funktioniert nur noch das, was ich als letztes erzeugt hab. Ich weiß nicht, wie ich das anders machen kann.


Ich versuche nochmal den Code in Tags zu packen, aber leider weiß ich nicht genau, wie das geht.

Java:
package hundi;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Tama {

    public static void main(String[] args) {

        JFrame tam = new JFrame("Mein Tamagotchi");
        tam.setSize(1000, 800);
        tam.setLocation(315, 6);

        JButton eins = new JButton("füttern");
        eins.setBounds(60, 500, 100, 20);
        tam.add(eins);

        JButton zwei = new JButton("spielen");
        zwei.setBounds(60, 550, 100, 20);
        tam.add(zwei);

        JButton drei = new JButton("schlafen");
        drei.setBounds(60, 600, 100, 20);
        tam.add(drei);

        JButton vier = new JButton("waschen");
        vier.setBounds(60, 650, 100, 20);
        tam.add(vier);

        // JButton neu = new JButton("zurück");
        // neu.setBounds(60, 400, 100, 20);
        // tam.add(neu);

        JLabel hintergrundbild = new JLabel(
                new ImageIcon("C:/Users/Lana/Desktop/Programmieren/Tamagotchi/Sitzend.jpg"));
        tam.getContentPane().add(hintergrundbild);
        hintergrundbild.setVisible(true);

        tam.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        tam.setVisible(true);

        ActionListener schlafen = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // JOptionPane.showMessageDialog(null, "Danke!");

                hintergrundbild.setVisible(false);
                JLabel bild = new JLabel(
                        new ImageIcon("C:/Users/Lana/Desktop/Programmieren/Tamagotchi/Liegend.jpg"));
                tam.getContentPane().add(bild);
                bild.setVisible(true);
            }
        };

        ActionListener spielen = new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                hintergrundbild.setVisible(false);
                JLabel bildspiel = new JLabel(
                        new ImageIcon("C:/Users/Lana/Desktop/Programmieren/Tamagotchi/Spielend.jpg"));
                tam.getContentPane().add(bildspiel);
                bildspiel.setVisible(true);

            }
        };

        // ActionListener back = new ActionListener() {
            // public void actionPerformed(ActionEvent e) {

                // hintergrundbild.setVisible(true);

      
        drei.addActionListener(schlafen);
        zwei.addActionListener(spielen);
        // neu.addActionListener(back);
    }
}
 

Meniskusschaden

Top Contributor
Ich glaube am einfachsten wäre es, ein einziges JLabel zu verwenden und es immer sichtbar zu lassen. Anstatt neue JLabel zu erzeugen und dem Frame hinzuzufügen, kannst du dem Label in den ActionListeners einfach mittels setIcon() das jeweils gewünschte Bild zuweisen.
 

Lanifee

Mitglied
Die ist Idee ist schon mal Super!
Da bin ich noch gar nicht drauf gekommen.
Leider funktioniert ist das nicht ganz.

Java:
 hintergrundbild.setIcon("C:/Users/Lana /Desktop/Programmieren/Tamagotchi/Liegend.jpg");

Ich hab versucht das in den ActionListener reinzuschreiben. Aber dann kommt die Fehlermeldung: The method setIcon (Icon)in the type JLabel is not applicable for the arguments (string).

Muss ich das Bild erst mit new IconImage hinzufügen?
 

Lanifee

Mitglied
Oh Danke! Das hatte ich versucht, aber es hat nicht funktioniert (mal wieder...)
Aber ich glaube ich habe jetzt eine Idee wieso nicht. Das versuche ich nochmal. :)
 

Lanifee

Mitglied
Okay, ich hab doch noch eine Frage.
Wenn ich das mit mit new ImageIcon erzeuge, woher bekommt das dann einen Namen, bzw wie greife ich darauf zu?
Ich weiß nämlich nicht, was ich dann bei setIcon() in die Klammern schreiben muss.
Tut mir leid, ich bin wirklich totale Anfängerin.
Aber ich finde deine Hilfe super!
 

Viktim

Bekanntes Mitglied
Ich geb dir mal noch ein paar Tipps was deinen Code angeht:
1.) Du solltest die Buttons nicht eins, zwei, ... nennen sondern wirklich schlafen, waschen etc. (Das hilft dir sehr, wenn du später nochmal auf deinen Code gucken musst.)
2.)Es wäre mir ein Rätsel, wenn dein setBounds() funktioniert, weil man dafür eigentlich das Layout auf null setzten muss, sprich:
Code:
tam.getContentPane().setLayout(null);
3.) Klassen und Methode werden dir später auch helfen :)
Du könntest z.B. deine ActionListener in eigene Klassen auslagern...
 

Lanifee

Mitglied
Oh, das mit dem Layout wusste ich nicht. Ich dachte eigentlich, dass das funktioniert.^^

Wäre es sinnvoll jeden ActionListener in eine eigene Klasse zu stecken?
Wie würde man das dann im Code schreiben? Kann man einfach auf die andere Klassen zugreifen, wenn sie im selben Paket sind?
 

Joose

Top Contributor
Wäre es sinnvoll jeden ActionListener in eine eigene Klasse zu stecken?
Kommt ganz darauf an wie umfangreich der Listener ist bzw. was er machen soll.

Wie würde man das dann im Code schreiben? Kann man einfach auf die andere Klassen zugreifen, wenn sie im selben Paket sind?
Wie du einen normalen ActionListener hinzufügst. Ein Objekt des Listeners erstellen und per add Methode hinzufügen.

Java:
myLabel.addActionListener(new MyActionListener1());
myLabel.addActionListener(new MyActionListener2());
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S mit Buttons verschiedene Bilder laden Java Basics - Anfänger-Themen 4
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Verschiedene JFrames in einem JFrame anzeigen Java Basics - Anfänger-Themen 7
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Verschiedene Fonts für verschiedene Dialogelemente Java Basics - Anfänger-Themen 2
G Verschiedene Packages Java Basics - Anfänger-Themen 3
G Daten in verschiedene Listen schreiben Java Basics - Anfänger-Themen 5
C Zustandsanzeige durch verschiedene Klassen Java Basics - Anfänger-Themen 4
S verschiedene Versionen Java Basics - Anfänger-Themen 2
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
L verschiedene formuare in einem fenster öffnen Java Basics - Anfänger-Themen 8
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
R verschiedene dateitypen öffnen Java Basics - Anfänger-Themen 5
L verschiedene zeichen einlesen Java Basics - Anfänger-Themen 5
C 2 verschiedene Tables = 2 verschiedene Renderer ? Java Basics - Anfänger-Themen 5
S klassen in verschiedene Dateien Java Basics - Anfänger-Themen 5
3 Verschiedene Fragen (bin neu hier) Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben