Eigene Klasse für JButton aus dem JFrame abrufen

stylegangsta

Bekanntes Mitglied
Hi zusammen,

aus Google bin ich eh' nicht Schlau geworden und in der Forumsuche hatte ich keinen Erfolg. Vielleicht geht das auch gar nicht was ich vorhabe.

Ich habe in einem JFrame viele Buttons (mit den Einstellungen, die ich brauche). Hier einer davon (getContentPane() usw. ist alle weiter oben im Code enthalten):
Java:
// Baden-Württemberg
        try {
            BW_Wappen = ImageIO.read(getClass().getResource("/img/Baden-Wuerttemberg.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }

        btnBW = new JButton();
        btnBW.addMouseListener(new MouseEventBW(btnBW));
        btnBW.setContentAreaFilled(false);
        btnBW.setIcon(new ImageIcon(BW_Wappen));
        btnBW.setFocusPainted(false);
        lblBW = new JLabel("Baden - W.");
        lblBW.setFont(lblBW.getFont().deriveFont(Font.BOLD, 15));
        lblBW.setForeground(Color.BLACK);
        lblBW.setHorizontalAlignment(SwingConstants.CENTER);
        lblBW.setVerticalAlignment(SwingConstants.CENTER);
        lblBW.setBounds(220, 138, 110, 140);
        btnBW.setBounds(220, 58, 110, 140);

Was die Button Eigenschaften betrifft habe ich eine eigene Klasse erstellt. Ist diese überhaupt Korrekt?
Java:
package Buttons;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JButton;

public class BtnBayern {

    BufferedImage Bayern_Wappen;
  
    private final AbstractButton btnBayern;
  
    public BtnBayern(AbstractButton btnBayern) {
        this.btnBayern = btnBayern;

    try {
        Bayern_Wappen = ImageIO.read(getClass().getResource("/img/Bayern.png"));
    } catch (IOException IOex) {
        System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
        IOex.printStackTrace();
    } catch (IllegalArgumentException IAex) {
        System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
        IAex.printStackTrace();
    }
    btnBayern = new JButton();
    btnBayern.setContentAreaFilled(false);
    btnBayern.setIcon(new ImageIcon(Bayern_Wappen));
    btnBayern.setFocusPainted(false);
    btnBayern.setBounds(340, 58, 110, 140);
}

    public AbstractButton setBtnBayern() {
        return btnBayern;
    }
}

Wenn diese Korrekt ist, wie kann ich die jetzt aus dem JFrame aufrufen. Denn es sind 16 Buttons und der Frame Code wird dadurch extrem lang und übersichtlich, wenn ich alle 16 da rein schreibe.
 

Joose

Top Contributor
Ich verstehe dein Problem nicht ganz, daher kann ich dir diesbezüglich auch nicht weiterhelfen.

Was ich aber sehe ist ein Fehler in deiner Klasse BtnBayern.
Im Konstruktor übergibst du ein Objekt der Klasse "AbstractButton". Nach dem try/catch Block wird dieser Parameter mit einem neuen JButton Objekt initialisiert. Warum? Dieses neue Objekt wird nicht weiter verwendet und geht nach dem Konstruktoraufruf wieder verloren
 

stylegangsta

Bekanntes Mitglied
Nach dem try/catch Block wird dieser Parameter mit einem neuen JButton Objekt initialisiert. Warum?
Deswegen meine Frage, ob das überhaupt Korrekt ist.

Ich verstehe dein Problem nicht ganz, daher kann ich dir diesbezüglich auch nicht weiterhelfen.

Mein Problem ist den Code des Frames zu verkürzen, in dem ich für jeden Button eine eigene Klasse erstelle und nur noch den Button aufrufe im Frame ohne noch die ganzen Eigenschaften dabei stehen zu haben. Also einfach nur übersichtlicher. Denn so sieht der Code aus mit den ganzen try/catch und Buttoneigenschaften.
Java:
package ProgramWindow;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;

import Buttons.Credits;
import MouseEvents.MouseEventBW;
import MouseEvents.MouseEventBayern;
import MouseEvents.MouseEventBerlin;
import MouseEvents.MouseEventBrb;
import MouseEvents.MouseEventBremen;
import MouseEvents.MouseEventHamburg;
import MouseEvents.MouseEventHessen;
import MouseEvents.MouseEventMV;
import MouseEvents.MouseEventNRW;
import MouseEvents.MouseEventNsachsen;
import MouseEvents.MouseEventRP;
import MouseEvents.MouseEventSH;
import MouseEvents.MouseEventSaarland;
import MouseEvents.MouseEventSachsen;
import MouseEvents.MouseEventSachsenAnh;
import MouseEvents.MouseEventTh;

@SuppressWarnings("serial")
public class AEKFrame extends JFrame {

    // Titelgrafik
    private JLabel lblTitelText;
    private JLabel lblAeskulapStab;

    // Anzeige Fortschrittsbalken
    private JProgressBar progFortSchrittsAnzeige;

    // Buttons optische Einstellung mit Bundesland Wappen
    public void JButton() {

        setHorizontalAlignment(SwingConstants.CENTER);
        setVerticalAlignment(SwingConstants.CENTER);
    }

    // Vetikale Ausrichtung
    private static void setVerticalAlignment(int center) {

    }

    // Horizontale Ausrichtung
    private static void setHorizontalAlignment(int center) {

    }

    // Buttons mit Bundesland Wappen
    private JButton btnBW;
    private JButton btnBayern;
    private JButton btnBerlin;
    private JButton btnBrb;
    private JButton btnBremen;
    private JButton btnHamburg;
    private JButton btnHessen;
    private JButton btnMV;
    private JButton btnNsachsen;
    private JButton btnNRW;
    private JButton btnRP;
    private JButton btnSaarland;
    private JButton btnSachsen;
    private JButton btnSachsenAnh;
    private JButton btnSH;
    private JButton btnTh;

    BufferedImage BW_Wappen, Bayern_Wappen, Berlin_Wappen, Brb_Wappen, Bremen_Wappen, Hamburg_Wappen, Hessen_Wappen,
    MV_Wappen, Nsachsen_Wappen, NRW_Wappen, RP_Wappen, Saarland_Wappen, Sachsen_Wappen, SachsenAnh_Wappen,
    SH_Wappen, Th_Wappen;;

    // Allgemeine Schaltflächen
    private JButton btnCredits;

    private class CreditsAction implements ActionListener {

        // Aufrufen der Credits - Klasse
        // btnCredits Popup - Fenster html kodiert
        @Override
        public void actionPerformed(ActionEvent e) {
            String msg = new String();
            msg = "<html><left><p style='font-size:9px;'><font face=\''>"
                    + "Microsoft Corporation in the United States and/or other countries.</em></left></p></html>";
            Credits popup = new Credits(msg);
            popup.setLocationRelativeTo(AEKFrame.this);
            popup.setVisible(true);
        }
    }

    // Äskulapnatter
    BufferedImage imgAeskulap;

    // Bundesland als Text unter Schaltflächen
    private JLabel lblBW, lblBayern, lblBerlin, lblBrb, lblBremen, lblHamburg, lblHessen, lblMV, lblNsachsen, lblNRW,
    lblRP, lblSaarland, lblSachsen, lblSachsenAnh, lblSH, lblTh;

    public AEKFrame() {

        /*
         * super ("\u00C4K DataBase Reader"); "Programmname: ÄK DataBase Reader"
         * setSize(1200, 530); "Fenstergröße des Programms: 1200px x 530px"
         * setLocationRelativeTo(null);
         * "Sofern kein weiteres Programm bzw. Fenster geöffnet ist" wird das
         * Programmfenster auf dem Bildschirm zentriert
         * setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         * "Beendet das Programm (darf nicht gelöscht werden ! ! !)"
         */
        super("\u00C4K DataBase Reader \u00a9 by Dr.EAMTeam V 1.09.15");
        setSize(1200, 530);
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        createWidgets();
        addWidgets();

    }

    // Fenster Elemente
    private void addWidgets() {
        getContentPane().setLayout(null);
        getContentPane().add(lblTitelText);
        getContentPane().add(lblAeskulapStab);
        getContentPane().add(progFortSchrittsAnzeige);
        getContentPane().add(btnBW);
        getContentPane().add(lblBW);
        getContentPane().add(btnBayern);
        getContentPane().add(lblBayern);
        getContentPane().add(btnBerlin);
        getContentPane().add(lblBerlin);
        getContentPane().add(btnBrb);
        getContentPane().add(lblBrb);
        getContentPane().add(btnBremen);
        getContentPane().add(lblBremen);
        getContentPane().add(btnHamburg);
        getContentPane().add(lblHamburg);
        getContentPane().add(btnHessen);
        getContentPane().add(lblHessen);
        getContentPane().add(btnMV);
        getContentPane().add(lblMV);
        getContentPane().add(btnNsachsen);
        getContentPane().add(lblNsachsen);
        getContentPane().add(btnNRW);
        getContentPane().add(lblNRW);
        getContentPane().add(btnRP);
        getContentPane().add(lblRP);
        getContentPane().add(btnSaarland);
        getContentPane().add(lblSaarland);
        getContentPane().add(btnSachsen);
        getContentPane().add(lblSachsen);
        getContentPane().add(btnSachsenAnh);
        getContentPane().add(lblSachsenAnh);
        getContentPane().add(btnSH);
        getContentPane().add(lblSH);
        getContentPane().add(btnTh);
        getContentPane().add(lblTh);
        getContentPane().add(btnCredits);
    }

    // Layout
    /*
     * Titeltext in jedem System vorhande Schriftart, Fett, Kursiv, Größe 30
     * Schriftfarbe rot Titelfeld durchsichtig Hintergrundfarbe weiß Titeltext
     * horizontal zentriert Titelfeld Postion x, y, Breite, Höhe
     */
    private void createWidgets() {

        // Hex Farbnummer Titeltext "Weiterbildungsdatenbanken der Ärztekammern"
        Color Titeltext = new Color(0xE60005);
        lblTitelText = new JLabel("Weiterbildungsdatenbanken der \u00C4rztekammern");
        lblTitelText.setFont(lblTitelText.getFont().deriveFont(Font.BOLD + Font.ITALIC, 30));
        lblTitelText.setForeground(Titeltext);
        lblTitelText.setOpaque(true);
        lblTitelText.setBackground(Color.WHITE);
        lblTitelText.setHorizontalAlignment(SwingConstants.CENTER);
        lblTitelText.setBounds(0, 0, 1194, 40);

        // Äskulapnatter
        try {
            imgAeskulap = ImageIO.read(getClass().getResource("/img/aeskulap-stab.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }

        lblAeskulapStab = new JLabel();
        lblAeskulapStab.setIcon(new ImageIcon(imgAeskulap));
        lblAeskulapStab.setBounds(10, 50, 200, 420);

        // Fortschrittsbalkenanzeige
        progFortSchrittsAnzeige = new JProgressBar(0, 100);
        progFortSchrittsAnzeige.setBounds(0, 480, 1194, 20);
        progFortSchrittsAnzeige.setAlignmentX(CENTER_ALIGNMENT);
        progFortSchrittsAnzeige.setVisible(isActive());

        // Bundesland Buttons:
        /*
         * Postionsangabe und größe in Form (x, y, Breite, Höhe)
         */

        // Baden-Württemberg
        try {
            BW_Wappen = ImageIO.read(getClass().getResource("/img/Baden-Wuerttemberg.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }

        btnBW = new JButton();
        btnBW.addMouseListener(new MouseEventBW(btnBW));
        btnBW.setContentAreaFilled(false);
        btnBW.setIcon(new ImageIcon(BW_Wappen));
        btnBW.setFocusPainted(false);
        lblBW = new JLabel("Baden - W.");
        lblBW.setFont(lblBW.getFont().deriveFont(Font.BOLD, 15));
        lblBW.setForeground(Color.BLACK);
        lblBW.setHorizontalAlignment(SwingConstants.CENTER);
        lblBW.setVerticalAlignment(SwingConstants.CENTER);
        lblBW.setBounds(220, 138, 110, 140);
        btnBW.setBounds(220, 58, 110, 140);

        // Bayern
        try {
            Bayern_Wappen = ImageIO.read(getClass().getResource("/img/Bayern.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnBayern = new JButton();
        btnBayern.addMouseListener(new MouseEventBayern(btnBayern));
        btnBayern.setContentAreaFilled(false);
        btnBayern.setIcon(new ImageIcon(Bayern_Wappen));
        btnBayern.setFocusPainted(false);
        lblBayern = new JLabel("Bayern");
        lblBayern.setFont(lblBayern.getFont().deriveFont(Font.BOLD, 15));
        lblBayern.setForeground(Color.BLACK);
        lblBayern.setHorizontalAlignment(SwingConstants.CENTER);
        lblBayern.setVerticalAlignment(SwingConstants.CENTER);
        lblBayern.setBounds(340, 138, 110, 140);
        btnBayern.setBounds(340, 58, 110, 140);

        // Berlin
        try {
            Berlin_Wappen = ImageIO.read(getClass().getResource("/img/Berlin.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnBerlin = new JButton();
        btnBerlin.addMouseListener(new MouseEventBerlin(btnBerlin));
        btnBerlin.setContentAreaFilled(false);
        btnBerlin.setIcon(new ImageIcon(Berlin_Wappen));
        btnBerlin.setFocusPainted(false);
        lblBerlin = new JLabel("Berlin");
        lblBerlin.setFont(lblBerlin.getFont().deriveFont(Font.BOLD, 15));
        lblBerlin.setForeground(Color.BLACK);
        lblBerlin.setHorizontalAlignment(SwingConstants.CENTER);
        lblBerlin.setVerticalAlignment(SwingConstants.CENTER);
        lblBerlin.setBounds(460, 138, 110, 140);
        btnBerlin.setBounds(460, 58, 110, 140);

        // Brandenburg
        try {
            Brb_Wappen = ImageIO.read(getClass().getResource("/img/Brandenburg.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnBrb = new JButton();
        btnBrb.addMouseListener(new MouseEventBrb(btnBrb));
        btnBrb.setContentAreaFilled(false);
        btnBrb.setIcon(new ImageIcon(Brb_Wappen));
        btnBrb.setFocusPainted(false);
        lblBrb = new JLabel("Brandenburg");
        lblBrb.setFont(lblBrb.getFont().deriveFont(Font.BOLD, 15));
        lblBrb.setForeground(Color.BLACK);
        lblBrb.setHorizontalAlignment(SwingConstants.CENTER);
        lblBrb.setVerticalAlignment(SwingConstants.CENTER);
        lblBrb.setBounds(580, 138, 110, 140);
        btnBrb.setBounds(580, 58, 110, 140);

        // Bremen
        try {
            Bremen_Wappen = ImageIO.read(getClass().getResource("/img/Bremen.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnBremen = new JButton();
        btnBremen.addMouseListener(new MouseEventBremen(btnBremen));
        btnBremen.setContentAreaFilled(false);
        btnBremen.setIcon(new ImageIcon(Bremen_Wappen));
        btnBremen.setFocusPainted(false);
        lblBremen = new JLabel("Bremen");
        lblBremen.setFont(lblBremen.getFont().deriveFont(Font.BOLD, 15));
        lblBremen.setForeground(Color.BLACK);
        lblBremen.setHorizontalAlignment(SwingConstants.CENTER);
        lblBremen.setVerticalAlignment(SwingConstants.CENTER);
        lblBremen.setBounds(700, 138, 110, 140);
        btnBremen.setBounds(700, 58, 110, 140);

        // Hamburg
        try {
            Hamburg_Wappen = ImageIO.read(getClass().getResource("/img/Hamburg.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnHamburg = new JButton();
        btnHamburg.addMouseListener(new MouseEventHamburg(btnHamburg));
        btnHamburg.setContentAreaFilled(false);
        btnHamburg.setIcon(new ImageIcon(Hamburg_Wappen));
        btnHamburg.setFocusPainted(false);
        lblHamburg = new JLabel("Hamburg");
        lblHamburg.setFont(lblHamburg.getFont().deriveFont(Font.BOLD, 15));
        lblHamburg.setForeground(Color.BLACK);
        lblHamburg.setHorizontalAlignment(SwingConstants.CENTER);
        lblHamburg.setVerticalAlignment(SwingConstants.CENTER);
        lblHamburg.setBounds(820, 138, 110, 140);
        btnHamburg.setBounds(820, 58, 110, 140);

        // Hessen
        try {
            Hessen_Wappen = ImageIO.read(getClass().getResource("/img/Hessen.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnHessen = new JButton();
        btnHessen.addMouseListener(new MouseEventHessen(btnHessen));
        btnHessen.setContentAreaFilled(false);
        btnHessen.setIcon(new ImageIcon(Hessen_Wappen));
        btnHessen.setFocusPainted(false);
        lblHessen = new JLabel("Hessen");
        lblHessen.setFont(lblHessen.getFont().deriveFont(Font.BOLD, 15));
        lblHessen.setForeground(Color.BLACK);
        lblHessen.setHorizontalAlignment(SwingConstants.CENTER);
        lblHessen.setVerticalAlignment(SwingConstants.CENTER);
        lblHessen.setBounds(940, 138, 110, 140);
        btnHessen.setBounds(940, 58, 110, 140);

        // Mecklenburg - Vorpommern
        try {
            MV_Wappen = ImageIO.read(getClass().getResource("/img/Mecklenburg-Vorpommern.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnMV = new JButton();
        btnMV.addMouseListener(new MouseEventMV(btnMV));
        btnMV.setContentAreaFilled(false);
        btnMV.setIcon(new ImageIcon(MV_Wappen));
        btnMV.setFocusPainted(false);
        lblMV = new JLabel("MV");
        lblMV.setFont(lblMV.getFont().deriveFont(Font.BOLD, 15));
        lblMV.setForeground(Color.BLACK);
        lblMV.setHorizontalAlignment(SwingConstants.CENTER);
        lblMV.setVerticalAlignment(SwingConstants.CENTER);
        lblMV.setBounds(1060, 138, 110, 140);
        btnMV.setBounds(1060, 58, 110, 140);

        // Niedersachsen
        try {
            Nsachsen_Wappen = ImageIO.read(getClass().getResource("/img/Niedersachsen.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnNsachsen = new JButton();
        btnNsachsen.addMouseListener(new MouseEventNsachsen(btnNsachsen));
        btnNsachsen.setContentAreaFilled(false);
        btnNsachsen.setIcon(new ImageIcon(Nsachsen_Wappen));
        btnNsachsen.setFocusPainted(false);
        lblNsachsen = new JLabel("Nsachsen");
        lblNsachsen.setFont(lblNsachsen.getFont().deriveFont(Font.BOLD, 15));
        lblNsachsen.setForeground(Color.BLACK);
        lblNsachsen.setHorizontalAlignment(SwingConstants.CENTER);
        lblNsachsen.setVerticalAlignment(SwingConstants.CENTER);
        lblNsachsen.setBounds(220, 386, 110, 140);
        btnNsachsen.setBounds(220, 306, 110, 140);

        // Nordrhein - Westfalen
        try {
            NRW_Wappen = ImageIO.read(getClass().getResource("/img/NRW.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnNRW = new JButton();
        btnNRW.addMouseListener(new MouseEventNRW(btnNRW));
        btnNRW.setContentAreaFilled(false);
        btnNRW.setIcon(new ImageIcon(NRW_Wappen));
        btnNRW.setFocusPainted(false);
        lblNRW = new JLabel("NRW");
        lblNRW.setFont(lblNRW.getFont().deriveFont(Font.BOLD, 15));
        lblNRW.setForeground(Color.BLACK);
        lblNRW.setHorizontalAlignment(SwingConstants.CENTER);
        lblNRW.setVerticalAlignment(SwingConstants.CENTER);
        lblNRW.setBounds(340, 386, 110, 140);
        btnNRW.setBounds(340, 306, 110, 140);

        // Rheinland - Pfalz
        try {
            RP_Wappen = ImageIO.read(getClass().getResource("/img/Rheinland-Pfalz.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnRP = new JButton();
        btnRP.addMouseListener(new MouseEventRP(btnRP));
        btnRP.setContentAreaFilled(false);
        btnRP.setIcon(new ImageIcon(RP_Wappen));
        btnRP.setFocusPainted(false);
        lblRP = new JLabel("Rheinland - P.");
        lblRP.setFont(lblRP.getFont().deriveFont(Font.BOLD, 15));
        lblRP.setForeground(Color.BLACK);
        lblRP.setHorizontalAlignment(SwingConstants.CENTER);
        lblRP.setVerticalAlignment(SwingConstants.CENTER);
        lblRP.setBounds(460, 386, 110, 140);
        btnRP.setBounds(460, 306, 110, 140);

        // Saarland
        try {
            Saarland_Wappen = ImageIO.read(getClass().getResource("/img/Saarland.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnSaarland = new JButton();
        btnSaarland.addMouseListener(new MouseEventSaarland(btnSaarland));
        btnSaarland.setContentAreaFilled(false);
        btnSaarland.setIcon(new ImageIcon(Saarland_Wappen));
        btnSaarland.setFocusPainted(false);
        lblSaarland = new JLabel("Saarland");
        lblSaarland.setFont(lblSaarland.getFont().deriveFont(Font.BOLD, 15));
        lblSaarland.setForeground(Color.BLACK);
        lblSaarland.setHorizontalAlignment(SwingConstants.CENTER);
        lblSaarland.setVerticalAlignment(SwingConstants.CENTER);
        lblSaarland.setBounds(580, 386, 110, 140);
        btnSaarland.setBounds(580, 306, 110, 140);

        // Sachsen
        try {
            Sachsen_Wappen = ImageIO.read(getClass().getResource("/img/Sachsen.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnSachsen = new JButton();
        btnSachsen.addMouseListener(new MouseEventSachsen(btnSachsen));
        btnSachsen.setContentAreaFilled(false);
        btnSachsen.setIcon(new ImageIcon(Sachsen_Wappen));
        btnSachsen.setFocusPainted(false);
        lblSachsen = new JLabel("Sachsen");
        lblSachsen.setFont(lblSachsen.getFont().deriveFont(Font.BOLD, 15));
        lblSachsen.setForeground(Color.BLACK);
        lblSachsen.setHorizontalAlignment(SwingConstants.CENTER);
        lblSachsen.setVerticalAlignment(SwingConstants.CENTER);
        lblSachsen.setBounds(700, 386, 110, 140);
        btnSachsen.setBounds(700, 306, 110, 140);

        // Sachsen - Anhaltt
        try {
            SachsenAnh_Wappen = ImageIO.read(getClass().getResource("/img/Sachsen-Anhalt.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnSachsenAnh = new JButton();
        btnSachsenAnh.addMouseListener(new MouseEventSachsenAnh(btnSachsenAnh));
        btnSachsenAnh.setContentAreaFilled(false);
        btnSachsenAnh.setIcon(new ImageIcon(SachsenAnh_Wappen));
        btnSachsenAnh.setFocusPainted(false);
        lblSachsenAnh = new JLabel("Sachsen - A.");
        lblSachsenAnh.setFont(lblSachsenAnh.getFont().deriveFont(Font.BOLD, 15));
        lblSachsenAnh.setForeground(Color.BLACK);
        lblSachsenAnh.setHorizontalAlignment(SwingConstants.CENTER);
        lblSachsenAnh.setVerticalAlignment(SwingConstants.CENTER);
        lblSachsenAnh.setBounds(820, 386, 110, 140);
        btnSachsenAnh.setBounds(820, 306, 110, 140);

        // Schleswig - Holstein
        try {
            SH_Wappen = ImageIO.read(getClass().getResource("/img/Schleswig-Holstein.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnSH = new JButton();
        btnSH.addMouseListener(new MouseEventSH(btnSH));
        btnSH.setContentAreaFilled(false);
        btnSH.setIcon(new ImageIcon(SH_Wappen));
        btnSH.setFocusPainted(false);
        lblSH = new JLabel("Schleswig - H.");
        lblSH.setFont(lblSH.getFont().deriveFont(Font.BOLD, 15));
        lblSH.setForeground(Color.BLACK);
        lblSH.setHorizontalAlignment(SwingConstants.CENTER);
        lblSH.setVerticalAlignment(SwingConstants.CENTER);
        lblSH.setBounds(940, 386, 110, 140);
        btnSH.setBounds(940, 306, 110, 140);

        // Thüringen
        try {
            Th_Wappen = ImageIO.read(getClass().getResource("/img/Thueringen.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnTh = new JButton();
        btnTh.addMouseListener(new MouseEventTh(btnTh));
        btnTh.setContentAreaFilled(false);
        btnTh.setIcon(new ImageIcon(Th_Wappen));
        btnTh.setFocusPainted(false);
        lblTh = new JLabel("Th\u00FCringen");
        lblTh.setFont(lblTh.getFont().deriveFont(Font.BOLD, 15));
        lblTh.setForeground(Color.BLACK);
        lblTh.setHorizontalAlignment(SwingConstants.CENTER);
        lblTh.setVerticalAlignment(SwingConstants.CENTER);
        lblTh.setBounds(1060, 386, 110, 140);
        btnTh.setBounds(1060, 306, 110, 140);

        // Allgemeine Buttons: Über
        btnCredits = new JButton("\u00DCBER \u00C4K");
        btnCredits.setFont(btnCredits.getFont().deriveFont(Font.BOLD, 15));
        btnCredits.setForeground(Color.decode("15073285"));
        btnCredits.setBounds(220, 240, 110, 40);
        btnCredits.addActionListener(new CreditsAction());
        btnCredits.setFocusPainted(false);
    }
}
 
Zuletzt bearbeitet:

thet1983

Top Contributor
warum schreibst du nicht eine Methode die ein JButton zurückgibt und in dieser Methode schreibst du alles rein was du brauchst....

Java:
private JButton createButton(/* Parameterliste */){
   JButton b = new JButton(/*...*/);
   // b.setTitle();
   // ...
   // ....
   return b;
}

// aufruf wäre dann --> JButton btn = createButton(/* Parameter übergeben */);

meinst du das??

--> Edit: Auch deine ganzen BufferedImages und JLabels kannst du in eine Methode packen
--> RückgabeTyp BufferedImage, JLabel...
 

stylegangsta

Bekanntes Mitglied
warum schreibst du nicht eine Methode die ein JButton zurückgibt und in dieser Methode schreibst du alles rein was du brauchst....

Java:
private JButton createButton(/* Parameterliste */){
   JButton b = new JButton(/*...*/);
   // b.setTitle();
   // ...
   // ....
   return b;
}

// aufruf wäre dann --> JButton btn = createButton(/* Parameter übergeben */);

meinst du das??

--> Edit: Auch deine ganzen BufferedImages und JLabels kannst du in eine Methode packen
--> RückgabeTyp BufferedImage, JLabel...

Ich glaube schon, dass es das ist. Versuche es mal. Und schreibe Ergebnis. Danke schon mal.
 

Joose

Top Contributor
Deswegen meine Frage, ob das überhaupt Korrekt ist.

Nein so wie du den Code aktuell hast ist er falsch und funktioniert nicht.

Mein Problem ist den Code des Frames zu verkürzen, in dem die für jeden Button eine eigene Klasse erstelle und nur noch den Button aufrufe im Frame ohne noch die ganzen Eigenschaften dabei stehen zu haben. Also einfach nur übersichtlicher. Denn so sieht der Code aus mit den ganzen try/catch und Buttoneigenschaften.
Java:
        // Baden-Württemberg
        try {
            BW_Wappen = ImageIO.read(getClass().getResource("/img/Baden-Wuerttemberg.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }

        btnBW = new JButton();
        btnBW.addMouseListener(new MouseEventBW(btnBW));
        btnBW.setContentAreaFilled(false);
        btnBW.setIcon(new ImageIcon(BW_Wappen));
        btnBW.setFocusPainted(false);
        lblBW = new JLabel("Baden - W.");
        lblBW.setFont(lblBW.getFont().deriveFont(Font.BOLD, 15));
        lblBW.setForeground(Color.BLACK);
        lblBW.setHorizontalAlignment(SwingConstants.CENTER);
        lblBW.setVerticalAlignment(SwingConstants.CENTER);
        lblBW.setBounds(220, 138, 110, 140);
        btnBW.setBounds(220, 58, 110, 140);

        // Bayern
        try {
            Bayern_Wappen = ImageIO.read(getClass().getResource("/img/Bayern.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
        btnBayern = new JButton();
        btnBayern.addMouseListener(new MouseEventBayern(btnBayern));
        btnBayern.setContentAreaFilled(false);
        btnBayern.setIcon(new ImageIcon(Bayern_Wappen));
        btnBayern.setFocusPainted(false);
        lblBayern = new JLabel("Bayern");
        lblBayern.setFont(lblBayern.getFont().deriveFont(Font.BOLD, 15));
        lblBayern.setForeground(Color.BLACK);
        lblBayern.setHorizontalAlignment(SwingConstants.CENTER);
        lblBayern.setVerticalAlignment(SwingConstants.CENTER);
        lblBayern.setBounds(340, 138, 110, 140);
        btnBayern.setBounds(340, 58, 110, 140);

Stimmt du hast hier viel doppelten Code. Aber den wirst du auch haben wenn du für jeden Button eine eigene Klasse machst, der einzige Unterschied du verteilst den Code auf mehrere Klassen. (ist zwar übersichtlicher aber nicht wirklich besser)

Wie wäre es mit einer Methode welche dir die Buttons erzeugt?

Java:
public JButton getBundeslandButton(String bundeslandName, .....) {
  try {
  Wappen = ImageIO.read(getClass().getResource("/img/" + bundeslandName + ".png"));
  } catch (IOException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
  ex.printStackTrace();
  } catch (IllegalArgumentException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
  ex.printStackTrace();
  }
  JButton bundesland = new JButton();
  bundesland.addMouseListener(new MouseEventBayern(bundesland)); // aus der Methode rausziehen? Per reflection laden > "MouseEvent"  + bundeslandName?
  bundesland.setContentAreaFilled(false);
  bundesland.setIcon(new ImageIcon(Wappen));
  bundesland.setFocusPainted(false);
  bundesland.setBounds(.......);
   return bundesland;
}

public JLabel getBundeslandLabel(String bundeslandName, ....) {
   JLabel bundesland = new JLabel(bundeslandName);
  bundesland = new JLabel("Bayern");
  bundesland.setFont(bundesland.getFont().deriveFont(Font.BOLD, 15));
  bundesland.setForeground(Color.BLACK);
  bundesland.setHorizontalAlignment(SwingConstants.CENTER);
  bundesland.setVerticalAlignment(SwingConstants.CENTER);
  bundesland.setBounds(........);

EDIT: Oje da war ich zu langsam, hätte den Beitrag vielleicht doch vorm Mittagessen fertigschreiben sollen ^^,
 

stylegangsta

Bekanntes Mitglied
warum schreibst du nicht eine Methode die ein JButton zurückgibt und in dieser Methode schreibst du alles rein was du brauchst....

Java:
private JButton createButton(/* Parameterliste */){
   JButton b = new JButton(/*...*/);
   // b.setTitle();
   // ...
   // ....
   return b;
}

// aufruf wäre dann --> JButton btn = createButton(/* Parameter übergeben */);

meinst du das??

--> Edit: Auch deine ganzen BufferedImages und JLabels kannst du in eine Methode packen
--> RückgabeTyp BufferedImage, JLabel...

Das mit der Klasse hat geklappt denke ich, jedenfalls nichts rotes, aber der Aufruf im Frame klappt irgendwie nicht oder ich habe was falsch gemacht. Der Aufruf im Frame und der getContentPane().add.... unterstreichen sich die ganze Zeit Gegenseitig rot mit der automatischen KOrrektur von eclipse.

Na ja, dann bleibt es eben so. Aber Danke. Was du mir gestern gezeigt hast, hat auch schon mega viel geholfen um den Code zu verkürzen.
 

stylegangsta

Bekanntes Mitglied
Nein so wie du den Code aktuell hast ist er falsch und funktioniert nicht.

Der Code funktioniert Reibungslos, da waren bis gestern sogar auch die ganzen MouseEvents drin. Diese sind aber dank @thet1983 jetzt alle in einer getrennten Klasse.

Stimmt du hast hier viel doppelten Code. Aber den wirst du auch haben wenn du für jeden Button eine eigene Klasse machst, der einzige Unterschied du verteilst den Code auf mehrere Klassen. (ist zwar übersichtlicher aber nicht wirklich besser)

Wie wäre es mit einer Methode welche dir die Buttons erzeugt?

Java:
public JButton getBundeslandButton(String bundeslandName, .....) {
  try {
  Wappen = ImageIO.read(getClass().getResource("/img/" + bundeslandName + ".png"));
  } catch (IOException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
  ex.printStackTrace();
  } catch (IllegalArgumentException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
  ex.printStackTrace();
  }
  JButton bundesland = new JButton();
  bundesland.addMouseListener(new MouseEventBayern(bundesland)); // aus der Methode rausziehen? Per reflection laden > "MouseEvent"  + bundeslandName?
  bundesland.setContentAreaFilled(false);
  bundesland.setIcon(new ImageIcon(Wappen));
  bundesland.setFocusPainted(false);
  bundesland.setBounds(.......);
   return bundesland;
}

public JLabel getBundeslandLabel(String bundeslandName, ....) {
   JLabel bundesland = new JLabel(bundeslandName);
  bundesland = new JLabel("Bayern");
  bundesland.setFont(bundesland.getFont().deriveFont(Font.BOLD, 15));
  bundesland.setForeground(Color.BLACK);
  bundesland.setHorizontalAlignment(SwingConstants.CENTER);
  bundesland.setVerticalAlignment(SwingConstants.CENTER);
  bundesland.setBounds(........);

EDIT: Oje da war ich zu langsam, hätte den Beitrag vielleicht doch vorm Mittagessen fertigschreiben sollen ^^,

Das sieht verdammt Interessant aus, kann aber wirklich dauern, bis ich darauf ein Ergebnis poste. Wahrscheinlich sogar erst am Samstag, wenn ich Pech habe.

EDIT: Aber nur weil ich bis Samstag nicht da bin.
 

Joose

Top Contributor
Das mit der Klasse hat geklappt denke ich, jedenfalls nichts rotes, aber der Aufruf im Frame klappt irgendwie nicht oder ich habe was falsch gemacht. Der Aufruf im Frame und der getContentPane().add.... unterstreichen sich die ganze Zeit Gegenseitig rot mit der automatischen KOrrektur von eclipse.

Ohne etwas Code können wir nur raten was vielleicht nicht geklappt hat usw.
Aber wie thet1983 schon gesagt habe und an meinem Beispiel zu sehen ist: Lagere die Erstellung von deinen Buttons und Labels in eine parametisierte Methode aus! Eigene Klassen je Bundesland Button sind da weniger ziel führend
 

Joose

Top Contributor
Der Code funktioniert Reibungslos, da waren bis gestern sogar auch die ganzen MouseEvents drin. Diese sind aber dank @thet1983 jetzt alle in einer getrennten Klasse.

Warum fragst du dann ob dieser korrekt ist wenn du es eh weißt.
Aber trotzdem die Klasse BtnBayern hat so wenig Sinn, wie oben schon geschrieben erzeugst du ein neues JButton Objekt mit dem du nichts weiter machst.
Es macht eben einen Unterschied zwischen "this.btnBayern" und "btnBayern" ;)
 

stylegangsta

Bekanntes Mitglied
Ohne etwas Code können wir nur raten was vielleicht nicht geklappt hat usw.
Aber wie thet1983 schon gesagt habe und an meinem Beispiel zu sehen ist: Lagere die Erstellung von deinen Buttons und Labels in eine parametisierte Methode aus! Eigene Klassen je Bundesland Button sind da weniger ziel führend

Also so mit (String xyz, int x, int z)?
 

stylegangsta

Bekanntes Mitglied
Warum fragst du dann ob dieser korrekt ist wenn du es eh weißt.
Aber trotzdem die Klasse BtnBayern hat so wenig Sinn, wie oben schon geschrieben erzeugst du ein neues JButton Objekt mit dem du nichts weiter machst.
Es macht eben einen Unterschied zwischen "this.btnBayern" und "btnBayern" ;)

Damit meinte ich die Klasse AEKFrame, nicht BtnBayern. Du hattest den Kommentar doch zum AEKFrame geschrieben. So dachte ich jedenfalls. Das mit der BtnBayern Klasse weiß ich nicht. Aber die kommt ja eh weg.


EDIT: Ohh, Sorry. Mein Fehler, hatte das Zitat nicht gesehen oder war nicht geladen. Kam alles hintereinander, dachte du meintest den langen Code.
 

Joose

Top Contributor
Was die Button Eigenschaften betrifft habe ich eine eigene Klasse erstellt. Ist diese überhaupt Korrekt?

Da du von einer eigenen Klasse bezüglich Buttons sprichst und danach auf Korrektheit gefragt hast dachte ich mir das es um die Klasse BtnBayern geht.
Und diese wäre eben nicht korrekt. Aber das tut jetzt nichts zum Thema wer welche meinte.

Also so mit (String xyz, int x, int z)?

Ja parametisiert, mit dem was du halt brauchst. Aber achte darauf jetzt nicht zuviele Parameter mitzugeben, da ist auch kein schöner Code dann ;)
(Es gibt Programmierer die meinen 5+ sind schon zuviele Parameter)
 

stylegangsta

Bekanntes Mitglied
Da du von einer eigenen Klasse bezüglich Buttons sprichst und danach auf Korrektheit gefragt hast dachte ich mir das es um die Klasse BtnBayern geht.
Und diese wäre eben nicht korrekt. Aber das tut jetzt nichts zum Thema wer welche meinte.



Ja parametisiert, mit dem was du halt brauchst. Aber achte darauf jetzt nicht zuviele Parameter mitzugeben, da ist auch kein schöner Code dann ;)
(Es gibt Programmierer die meinen 5+ sind schon zuviele Parameter)

Vielen Dank, also Samstag Nachmittag dürfte dann hier das Ergebnis stehen.
 

strußi

Top Contributor
Kein Ding. Mir wurde mal gesagt, dass es nicht so angreifend ist, wenn man gefragt wird, ob es ein Fehler ist, wie "Das ist falsch" ;-) deshalb probier ich das weitesgehend umzusetzten.
 

stylegangsta

Bekanntes Mitglied
Guten Morgen Joose,

ich habe deinen Code jetzt mal exemplarisch nur für einen Button erstellt, denke mal, dass ..... die anderen sein sollen. Ist das soweit richtig, wie ich ihn erstellt habe? Hab auch den Aufruf aus der JFrame Klasse nicht hinbekommen. Und ich habe noch ein viel erheblicheres Problem, schreibe ich aber im nächsten Posting.

Java:
public class BtnBayern {

    public JButton getBtnBayern(BufferedImage Bayern_Wappen) {
        try {
            Bayern_Wappen = ImageIO.read(getClass().getResource("/img/Bayern_Wappen.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }
       
        JButton btnBayern = new JButton();
        btnBayern.addMouseListener(new MouseEventBayern(btnBayern));
        btnBayern.setContentAreaFilled(false);
        btnBayern.setIcon(new ImageIcon(Bayern_Wappen));
        btnBayern.setFocusPainted(false);
        btnBayern.setBounds(340, 58, 110, 140);
        return btnBayern;
    }

    public JLabel getLblBayern(String lblBayern) {
        JLabel bayern = new JLabel("Bayern");
        bayern.setFont(bayern.getFont().deriveFont(Font.BOLD, 15));
        bayern.setForeground(Color.BLACK);
        bayern.setHorizontalAlignment(SwingConstants.CENTER);
        bayern.setVerticalAlignment(SwingConstants.CENTER);
        bayern.setBounds(340, 138, 110, 140);
        return bayern;
    }
}
 

stylegangsta

Bekanntes Mitglied
Unabhängig davon, dass ich Code übersichtlicher gestalten will, funktioniert ja alles soweit. Es erscheint allerdings vor dem Programmstart noch ein SplashScreen. Dieser erscheint auf "DIESEM" Rechner. Testweise habe ich den Code dann auch auf mein Notebook geknallt uns ausprobiert. Funktioniert auch wunderbar der SplashScreen und Rest.

Da ich ja aber sowohl hier zu Hause, als auch in der Schule an dem Programm arbeite, muss ich es ja auch dort auf den Rechnern haben. Das Problem: Auf keinem einzigen Rechner in der Schule erscheint der SplashScreen. Weder, wenn ich es über eclipse, noch über die ausführbare jar Datei starte.

Das Merkwürdige daran ist aber, sobald ich java jre und jdk deinstalliere und noch mal neu installiere erscheint der SplashScreen. Über eclipse und über die jar. Aber nur beim ersten Start nach der neuinstallation von Java. Beim zweiten Start wieder nicht.

eclipse gibt dann ganz viel rote Zeilen aus. Einige, die ich in Erinneurng habe:
java. AWT-Event Queue-0
..... (Native Mehtod), wenn ich das anklicke, steht no source attached
und eclipse meckert über zeile 19 Splachscreen.java
in der Zeile 19 steht folgendes: JFrame frame = new JFrame();<---was gibt es daran zu meckern?

Und außerdem läuft es ja beim aller ersten Start nach java Neuinstallation, also sind die Fehlermeldungen wahrscheinlich gar nicht Ernst zu nehmen und es liegt an etwas ganz anderem. Hab nur nicht die geringste Idee was es sein kann, wenn es einfach nur beim zweiten Start nicht mehr geht. Jemand ne Idee evtl.?
 

Joose

Top Contributor
ich habe deinen Code jetzt mal exemplarisch nur für einen Button erstellt, denke mal, dass ..... die anderen sein sollen. Ist das soweit richtig, wie ich ihn erstellt habe?

Die Änderung zu deinem vorherigen Code ist gerade nur mal das du die Erstellung vom Button und Label in eine eigene Methode ausgelagert. Aber trotzdem für jedes Bundesland eine eigene Klasse.

Trotzdem hast du weiterhin doppelten Code und das ist unnötig.

Java:
        try {
            Bayern_Wappen = ImageIO.read(getClass().getResource("/img/Bayern_Wappen.png"));
        } catch (IOException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
            ex.printStackTrace();
        } catch (IllegalArgumentException ex) {
            System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
            ex.printStackTrace();
        }

Das Laden des Images unterscheidet sich nur im Namen der jpg Datei. Sprich 16x hast du dasselbe try/catch Konstrukt nur um jeweils ein anderes Bild zu laden. Den Code von mir im dem vorherigen Post ist eigentlich schon die Lösung!
 

stylegangsta

Bekanntes Mitglied
Die Änderung zu deinem vorherigen Code ist gerade nur mal das du die Erstellung vom Button und Label in eine eigene Methode ausgelagert. Aber trotzdem für jedes Bundesland eine eigene Klasse.

Trotzdem hast du weiterhin doppelten Code und das ist unnötig.

Das Laden des Images unterscheidet sich nur im Namen der jpg Datei. Sprich 16x hast du dasselbe try/catch Konstrukt nur um jeweils ein anderes Bild zu laden. Den Code von mir im dem vorherigen Post ist eigentlich schon die Lösung!
Wäre es zu viel verlangt, dich um den Gefallen zu bitten dein Codebeispiel mit zwei Bundesländern zu posten? Ich habe nur Fragezeichen im Kopf derzeit. Verwirrung.
 

strußi

Top Contributor
Es ist nacher nur der Aufruf der Methode, die den Code "verändert", das ist der Sinn bei der Sache. Einmal schreiben 100 aufrufen. nicht 100 mal schreiben und nur einmal aufrufen.

@Joose ich leih mir mal deinen Code ;-)
Java:
public JButton getBundeslandButton(String bundeslandName, .....) {
  try {
  Wappen = ImageIO.read(getClass().getResource("/img/" + bundeslandName + ".png"));
  } catch (IOException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
  ex.printStackTrace();
  } catch (IllegalArgumentException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
  ex.printStackTrace();
  }
  JButton bundesland = new JButton();
  bundesland.addMouseListener(new MouseEventBayern(bundesland)); // aus der Methode rausziehen? Per reflection laden > "MouseEvent"  + bundeslandName?
  bundesland.setContentAreaFilled(false);
  bundesland.setIcon(new ImageIcon(Wappen));
  bundesland.setFocusPainted(false);
  bundesland.setBounds(.......);
   return bundesland;
}

public JLabel getBundeslandLabel(String bundeslandName, ....) {
   JLabel bundesland = new JLabel(bundeslandName);
  bundesland.setFont(bundesland.getFont().deriveFont(Font.BOLD, 15));
  bundesland.setForeground(Color.BLACK);
  bundesland.setHorizontalAlignment(SwingConstants.CENTER);
  bundesland.setVerticalAlignment(SwingConstants.CENTER);
  bundesland.setBounds(........);
}

du hast eine Klasse in der du dein Lable und dein Button erstellst, diese rufst du dann mit
JLabel bayernLabel =Objektreverenz.getBundeslandLabel( "Bayern"); auf. Genaus funktioniert es für den Button JButton bayernButten =....;
das machst du dann auch für deine anderen Bundesländer. ganz einfach.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Und so schaut der Aufruf dieser Methode aus:

Java:
JButton btnBayern = getBundeslandButton("Bayern", .....);

Bei den "......" handelt es sich um weitere Parameter wie zum Beispiel die Bounds usw.
 

Joose

Top Contributor
Dann würde ich dir wirklich dringend dazu raten die OOP an ein paar kleinen Konsolenprogrammen zu lernen und üben!
GUI Programmierung ohne Verständnis von OOP wird nicht lange gutgehen. Man sollte den eigenen Code auch verstehen können um möglicherweise auftauchende Fehler zu fixen bzw. Anpassungen vorzunehmen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eigene Java Klasse für allgemeine Grafikelemente AWT, Swing, JavaFX & SWT 8
T eigene Klasse für Panel AWT, Swing, JavaFX & SWT 9
M Eigene Klasse für mehrer JSplitPanes AWT, Swing, JavaFX & SWT 3
M CellEditor und CellRenderer für eigene Klasse AWT, Swing, JavaFX & SWT 4
T 4 db tabellen in einem karteireiter eigene klasse für die me AWT, Swing, JavaFX & SWT 7
C UIDefaults für eigene Klasse anpassen AWT, Swing, JavaFX & SWT 3
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
M Eigene Klasse mit Grafikobjekten schreiben AWT, Swing, JavaFX & SWT 4
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
J Eigene Klasse auf Basis Textfield in SceneBuilder anzeigen AWT, Swing, JavaFX & SWT 4
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
G Event Handling Event Handling in eigene Klasse AWT, Swing, JavaFX & SWT 4
A JavaFX Scene Builder eigene Klasse hinzufügen AWT, Swing, JavaFX & SWT 2
C Swing MenuBar als eigene Klasse AWT, Swing, JavaFX & SWT 4
MrMilti eigene Klasse in JTable ablegen AWT, Swing, JavaFX & SWT 12
M In eigene JPanel Klasse zeichnen AWT, Swing, JavaFX & SWT 4
M eigene GUI Bibliothek erstellen. AWT, Swing, JavaFX & SWT 10
Jose05 JavaFX: eigene FXML-Datei für einen Button AWT, Swing, JavaFX & SWT 3
V Swing für jedes Kästchen eine eigene Farbe AWT, Swing, JavaFX & SWT 2
L JavaFX Eigene Font benutzen AWT, Swing, JavaFX & SWT 6
B Notepad++ in die eigene GUI einbinden AWT, Swing, JavaFX & SWT 7
B JavaFX Bild um die eigene Achse drehen lassen AWT, Swing, JavaFX & SWT 0
S JavaFX Drehen um eigene Achse AWT, Swing, JavaFX & SWT 2
P X extends TreeView - eigene Methoden AWT, Swing, JavaFX & SWT 5
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L JavaFX Eigene JavaFX Controls anlegen AWT, Swing, JavaFX & SWT 1
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
L Eigene JComponent in GridLayout AWT, Swing, JavaFX & SWT 9
L Swing Wie programmiere ich eine eigene GUI? AWT, Swing, JavaFX & SWT 12
T Swing Eigene Konsole AWT, Swing, JavaFX & SWT 5
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M eigene horizontale Scrollbar AWT, Swing, JavaFX & SWT 1
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
J JavaFX Eigene ListCell Problem(Objekte werden doppelt angezeigt) AWT, Swing, JavaFX & SWT 1
A Swing Eigene JComponent Scrollable AWT, Swing, JavaFX & SWT 6
Kenan89 3D Models aus anderen Spielen in eigene einfügen AWT, Swing, JavaFX & SWT 3
R SWT Eigene Events erstellen und werfen AWT, Swing, JavaFX & SWT 59
P Eigene CMD GUI zum Starten von JAR AWT, Swing, JavaFX & SWT 10
M Swing eigene Dialoge, aber wie genau? AWT, Swing, JavaFX & SWT 5
S Eigene JComponent Image zeichnen AWT, Swing, JavaFX & SWT 3
P Swing Alle Zeilen einer Spalte (jTable) zusammen zählen und in eine eigene Zeile das Ergebnis schreiben. AWT, Swing, JavaFX & SWT 7
K 3D-Grafik Eigene "Kamera" AWT, Swing, JavaFX & SWT 2
S Swing Eigene Komponente (JPanel) soll ChangeEvents verteilen AWT, Swing, JavaFX & SWT 12
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
alderwaran Swing XML editor plugin für eigene anwendung AWT, Swing, JavaFX & SWT 2
P Swing Eigene Komponente Entwickeln - erben von JComponent oder JPanel? AWT, Swing, JavaFX & SWT 5
B Eigene Methoden in TABs einfügen AWT, Swing, JavaFX & SWT 8
R eigene Methoden für Buttons? AWT, Swing, JavaFX & SWT 11
H Swing Eigene Komponente wird nur halb oder komisch angezeigt AWT, Swing, JavaFX & SWT 3
H Swing Eigene Komponente reagiert falsch auf mouseClicked() AWT, Swing, JavaFX & SWT 5
T Eigene JComponent AWT, Swing, JavaFX & SWT 4
L Eigene Design Oberfläche erstellen AWT, Swing, JavaFX & SWT 3
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
T SWT eigene Komponenten AWT, Swing, JavaFX & SWT 2
Kr0e Allgemeine Frage zu Java2D (Eigene Impl.) AWT, Swing, JavaFX & SWT 18
A Eigene StatusBar AWT, Swing, JavaFX & SWT 2
1 Eigene JComponent mit MouseListener versehen AWT, Swing, JavaFX & SWT 10
S Eigene GUI Elemente erstellen AWT, Swing, JavaFX & SWT 6
D Eigene Methode soll Gerade zeichnen AWT, Swing, JavaFX & SWT 5
D Swing Eigene Komponente mit JSpinner AWT, Swing, JavaFX & SWT 4
R Swing JTable: Eigene Zeichnung im Header AWT, Swing, JavaFX & SWT 11
A Eigene Border für Buttons AWT, Swing, JavaFX & SWT 19
A Eigene Buttons AWT, Swing, JavaFX & SWT 20
C JTextPane HTML und eigene Tags AWT, Swing, JavaFX & SWT 10
S Eigene GUI (evt. Toolkit) AWT, Swing, JavaFX & SWT 10
M SWT: eigene Events AWT, Swing, JavaFX & SWT 9
& eigene Schriftart in JEditorpane AWT, Swing, JavaFX & SWT 2
T Eigene Fenster kreieren?zb. wie bei Winamp? AWT, Swing, JavaFX & SWT 9
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
F eigene Swing-Komponente. Drehregler AWT, Swing, JavaFX & SWT 4
M Eigene Komponenten basteln AWT, Swing, JavaFX & SWT 25
O Eigene GUI Objekte entwerfen? AWT, Swing, JavaFX & SWT 3
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
S Eigene Komponenten AWT, Swing, JavaFX & SWT 2
T Eigene erweiterte MouseEvents nutzen AWT, Swing, JavaFX & SWT 2
M eigene ComponentUI und Serializable AWT, Swing, JavaFX & SWT 3
E Eigene Steuerelemente bauen AWT, Swing, JavaFX & SWT 3
H eigene paintComponent(Graphics) kommt mit rezise nicht klar AWT, Swing, JavaFX & SWT 6
G fullscreen GUI - eigene components? AWT, Swing, JavaFX & SWT 2
S SWT Für jede gui komponente eigene methode AWT, Swing, JavaFX & SWT 2
J Eigene Fehlermeldung in AWT erzeugen AWT, Swing, JavaFX & SWT 2
D eigene SwingKonsole. AWT, Swing, JavaFX & SWT 5
I Eigene JComboBox AWT, Swing, JavaFX & SWT 10
C ISelectionProvider und eigene Selections AWT, Swing, JavaFX & SWT 2
M kann man auch eigene look and feels machen? AWT, Swing, JavaFX & SWT 2
L eigene Komponente, ActionEvent senden? AWT, Swing, JavaFX & SWT 3
E Beim Schließen des Fensters eigene Funktion aufrufen AWT, Swing, JavaFX & SWT 8
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
T JFrame - eigene Titelleiste AWT, Swing, JavaFX & SWT 8
Y Eigene Komponente einfügen AWT, Swing, JavaFX & SWT 6
G Eigene Koponente erstellen AWT, Swing, JavaFX & SWT 3
G Eigene Componente in jScrollView einbetten AWT, Swing, JavaFX & SWT 6
T Eigene grafische Oberfläche AWT, Swing, JavaFX & SWT 7
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
_user_q Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
Jose05 JavaFx Fxml: GUI aus einer anderen Klasse starten AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben