MouseEvents aus JButton aufrufen

stylegangsta

Bekanntes Mitglied
Guten Morgen,

leider habe ich nirgends ein Ergebnis gefunden, was mein Problem löst.
Ich habe 16 JButtons, die innerhalb der Klasse vom JFrame aufgerufen werden und die Momentan mit dem MouseEvent dank der Hilfe des Forums genauso funktionieren, wie ich will. Ein Button hat folgenden Code (Fortsetzung unterhalb des Codes):
Java:
btnBayern = new JButton();
        btnBayern.setContentAreaFilled(false);

        // innere event klasse
        class MyMouseEventBayern extends MouseAdapter {

            public void mouseEntered(MouseEvent e) {
                btnBayern.setBorderPainted(true);
                btnBayern.setBorder(BorderFactory.createEtchedBorder(Color.decode("35529"), Color.decode("35529")));
                btnBayern.setOpaque(true);
                btnBayern.setContentAreaFilled(false);

            }

            public void mouseExited(MouseEvent e) {
                btnBayern.setBorderPainted(false);
                btnBayern.setOpaque(false);
                btnBayern.setContentAreaFilled(false);
                btnBayern.setFocusPainted(false);

            }
        }

        btnBayern.setIcon(new ImageIcon(Bayern_Wappen));
        btnBayern.addMouseListener(new MyMouseEventBayern());
        btnBayern.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                btnBayern.setBackground(Color.WHITE);
            }

            public void mouseExited(java.awt.event.MouseEvent evt) {
                btnBayern.setBackground(UIManager.getColor("control"));
            }
        });

        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);

Und das Ganze 16 mal untereinander ist ein verdammt langer Code. Um diesen übersichtlicher zu halten, hatte ich vor für jeden Button eine eigene MouseEvent Klasse zu erstellen und die dazugehörigen Methoden dort rein zu schreiben. Habe ich für einen Button exemplarisch gemacht. Code hier (frage dazu unterhalb des Codes):
Java:
package MouseEvents;

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.BorderFactory;
import javax.swing.UIManager;
import javax.swing.border.Border;

public class MouseEventBW extends MouseAdapter {

    // Mousezeiger in Schaltfläche
    public void mouseEntered(MouseEvent e) {
        setBorderPainted(true);
        setBorder(BorderFactory.createEtchedBorder(Color.BLACK, Color.BLACK));
        setOpaque(true);
        setContentAreaFilled(false);
        setBackground(Color.decode("16375062"));

    }
  
    // Mousezeiger außerhalb Schaltfläche
    public void mouseExited(MouseEvent e) {
        setBorderPainted(false);
        setOpaque(false);
        setContentAreaFilled(false);
        setFocusPainted(false);
        setBackground(UIManager.getColor("control"));
    }

    private void setBackground(Color decode) {
        // TODO Auto-generated method stub

    }

    private void setContentAreaFilled(boolean b) {
        // TODO Auto-generated method stub

    }

    private void setOpaque(boolean b) {
        // TODO Auto-generated method stub

    }

    private void setBorder(Border createEtchedBorder) {
        // TODO Auto-generated method stub

    }

    private void setBorderPainted(boolean b) {
        // TODO Auto-generated method stub

    }

    private void setFocusPainted(boolean b) {
        // TODO Auto-generated method stub

    }
}

Ist die Klasse so überhaupt korrekt geschrieben?
Wenn ja, wie kann ich die jetzt aus dem JButton, der im Jframe ist aufrufen?
Bekomme das einfach nicht hin. Geht das überhaupt?
Danke im Voraus
 
Den Button kannst du einfach im Konstruktor übergeben.
Java:
  public class MouseEventBW extends MouseAdapter {

     private final AbstractButton   button;

     public MouseEventBW( AbstractButton button ) {
       this.button = button;
     }

     @Override
     public void mouseEntered( MouseEvent arg0 ) {
       button.setBorderPainted( true );
       button.setBorder( BorderFactory.createEtchedBorder( Color.BLACK, Color.BLACK ) );
       button.setOpaque( true );
       button.setContentAreaFilled( false );
       button.setBackground( Color.decode( "16375062" ) );
     }

     @Override
     public void mouseExited( MouseEvent arg0 ) {
       button.setBorderPainted( false );
       button.setOpaque( false );
       button.setContentAreaFilled( false );
       button.setFocusPainted( false );
       button.setBackground( UIManager.getColor( "control" ) );
     }
   }
Der Aufruf sieht dann so aus: button.addMouseListener( new MouseEventBW( button ) );

Ich würde den Namen der Klasse aber nochmal überdenken. Der Name erinnert mmn. zu stark an MouseEvent. Und MouseEvent und MouseListener/Adapter sind halt zwei unterschiedliche Klassen.
 
Cool, danke. Funktioniert super. Was den Klassennamen angeht ist mir leider nichts Besseres eingefallen, als auch die Abkürzung, die ich für die Buttons und Labels (also in dem Fall BW) verwende dran zu hängen, damit ich später auch sofort weiß um welche Funktion es sich für welchen Button handelt.
Schlechte Idee?
 

Zurück
Oben