Bild beim betätigen eines JButtons

CptK

Bekanntes Mitglied
Hey,
ich habe das Problem, dass ich bei mir einen JButton habe und wenn der angeklickt wird soll ein Bild angezeigt werden, ich weiß aber leider nicht wieso....

Hier das Frame:
Code:
package Frame;

import javax.swing.*;

import Start.StartDesign;

public class MainFrame extends JFrame {
   
    public static JPanel contentPane;
   
    public MainFrame() {
        new JFrame();
        setSize(800,600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setLayout(null);
        setResizable(false);
        requestFocus();
       
        contentPane = new JPanel();
        contentPane.setSize(800,600);
        contentPane.setLayout(null);
       
        StartDesign.createStart();
        Background.createBackground();
       
        contentPane.setVisible(true);
        setContentPane(contentPane);
        setVisible(true);
    }
   
   
}

Hier die Erstellung des Hintergrunds(das geht):
Code:
package Frame;

import javax.swing.*;

public class Background {
   
    public static JLabel background;
   
    public static void createBackground() {
       
        Icon bg = new ImageIcon("rsc/BlueBackground.png");
        background = new JLabel(bg);
        background.setSize(800,600);
        background.setVisible(true);
        MainFrame.contentPane.add(background);
       
    }
   
}

Und hier die Klasse mit dem Problem(zeile 27 bis 31):
Code:
package Start;

import java.awt.event.*;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;

import Frame.MainFrame;

public class StartDesign {
   
    public static JButton BtnStart;
    public static JButton BtnExit;
    public static JLabel Plus;
   
    public static void createStart() {
       
        BtnStart = new JButton("Starten");
        BtnStart.setBounds(300,150,200,80);
        StartLadescreen.Ladescreen();
        BtnStart.addActionListener((ActionListener) new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {           
                System.out.println("Starten...");
                Icon imgPlus = new ImageIcon("rsc/plus.png");
                Plus = new JLabel(imgPlus);
                Plus.setBounds(200,150,150,150);
                Plus.setVisible(true);
                MainFrame.contentPane.add(Plus);
                StartDesign.BtnStart.setVisible(false);
                StartDesign.BtnExit.setVisible(false);
               
            }
        });


        BtnStart.setVisible(true);
        MainFrame.contentPane.add(BtnStart);
       
        BtnExit = new JButton("Verlassen");
        BtnExit.setBounds(300,250,200,80);
        BtnExit.addActionListener((ActionListener) new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {           
                System.out.println("Beenden");
                System.exit(0);
            }
        });
        BtnExit.setVisible(true);
        MainFrame.contentPane.add(BtnExit);
       
    }
   
}

Vielen Dank für eure Hilfe!
 
Moin,
ich verstehe Dein Frage nicht wirklich 🙁
... ich bei mir einen JButton habe und wenn der angeklickt wird, soll ein Bild angezeigt werden, ich weiß aber leider nicht wieso....
Du weißt nicht, wieso das Bild anzeigt werden soll ??? 🙄

Und hier die Klasse mit dem Problem(zeile 27 bis 31):
Was genau wären denn die genannten Zeilen!
Und was genau ist dein Problem??

Poste mal (a) die konkrete Aufgabenstellung und (b) das konkrete Problem!
VG Klaus
 
Für meinen Geschmack immer noch viel zu viel static. Aber das Problem ist das Gleiche wie bei deinem anderen Post. Du zeichnest nicht neu, nachdem du das Label hinzugefügt hast. Also repaint() direkt oder indirekt aufrufen.
 
Ich stehe grade aufm schlauch....
nur
Code:
repaint();
gibt es nicht und
Code:
MainFrame.contentPane.repaint();
                Plus.repaint();
gehen auch nicht
 
@UnknownInnocent
Ein Beispiel:
Java:
package unknowninnocent;

import java.awt.BorderLayout;
import java.awt.Container;
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;

public class BilderFolge extends JFrame
{

    private final int FENSTER_BREITE = 600;
    private final int FENSTER_HOEHE = FENSTER_BREITE;
    private final String[] bilder_array;
    /**
     * Zaehler fuer Bildabfolge
     */
    private int counter = 0;

    /**
     * Container, eine Kiste, hat Komponenten..
     */
    private final Container container;
    /**
     * wie JLabel, hier zum Anzeigen eines Bildes und...
     */
    private JLabel bild;
    /**
     * ein JButton, um Aktion auszuloesen.
     */
    private final JButton schalter;

    public BilderFolge()
    {
        /**
         * initializiere den Container
         */
        this.container = getContentPane();
        this.container.setLayout(new BorderLayout());

        initialize(); //hier dein JFrame

        /**
         * Bildernamen geladen,
         */
        this.bilder_array = ContentLoader.getImageCards();
        /**
         * Icon erstellt,
         */
        ImageIcon icon = new ImageIcon(getClass().getResource(bilder_array[counter]));
        /**
         * Icon zugewiesen
         */
        bild = new JLabel(icon);
   
   
        schalter = new JButton("Wechsel");
        /**
         * Um Aktionen auszuloesen, brauchen wir ein Listener, welcher den
         * Schalter ueberwacht. Da hier nur ein Aktionerzeuger moeglich ist,
         * darf {@code ActionEvent e} unbeachtet bleiben
         */
        schalter.addActionListener(new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                if (counter == bilder_array.length - 1)
                {
                    bild.setIcon(new ImageIcon(getClass().getResource(bilder_array[counter])));
                    counter = 0;
                } else
                {
                    bild.setIcon(new ImageIcon(getClass().getResource(bilder_array[counter])));
                    counter++;
                }
            }
        });

        /**
         * Befuelle die "Kiste"
         */
        this.container.add(bild, BorderLayout.CENTER);
        this.container.add(schalter, BorderLayout.SOUTH);

    }

    /**
     * Baue dein JFrame
     */
    private void initialize()
    {
        this.setTitle("BilderFolge");
        this.setVisible(true);
        this.setSize(FENSTER_BREITE, FENSTER_HOEHE);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

}
Java:
public final class ContentLoader
{

    /**
     * Ordnerinikator
     */
    private static final String ADDRESS = "pics/";

    /**
     * Namen aller Bilder des Ordners {@code pics}
     */
    private static final String[] CARDS = new String[]
    {
        "arcane_artificer.png",
        "mana_wyrm.png",
        "radiant_elemental.png",
        "raven_familiar.png",
        "rebuke.png"
    };

    /**
     * Liefere alle Namen der Bilder eines Ordners {@code pics} an ein
     * Empfaenger. Spaeter werden diese Namen dazu benutzt, fuer ein in diesem
     * Fall {@code bild} JLabel den Icon zu setzen.
     *
     * @return Array mit Namen
     */
    public static String[] getImageCards()
    {
        String[] string = new String[CARDS.length];
        for (int x = 0; x < string.length; x++)
        {
            final String url = ADDRESS + CARDS[x];
            string[x] = url;

        }
        return string;
    }
}
Rufe die Klasse BilderFolge in der Main-Methode auf.
BilderFolge bilderFolge = new BilderFolge();
Den Bilderordner muss du dir noch erstellen. Bedenke, dass die Variable private static final String ADDRESS = "pics/"; den Ordner "pics" in dem package deiner Klasse sucht.
 

Anhänge

  • Inhalt_pics.PNG
    Inhalt_pics.PNG
    11,3 KB · Aufrufe: 29
Zuletzt bearbeitet:

Zurück
Oben