jButton mit ImageIcon & MouseListener

Status
Nicht offen für weitere Antworten.

Dr.Gibble

Mitglied
Hallo miteinander,

ich möchte mir gerne eine Gui basteln die wie das Einstellungsmenü von Netbeans aussieht.
unter Netbeans: Tools -> Options

menu.jpg


Bis jetzt sieht auch alles sehr schick aus nur bekomme ich diesen blauen Hintergrund nicht so hin wie er oben zu sehen ist wenn die Maus den Focus darauf hat.

Bisher verwende ich die Listener "MouseEntered", "MouseExited" und "MousePressed" dafür die mir die Werte je nach Bedarf ändern.
Code:
private void buttonMouseEntered(java.awt.event.MouseEvent evt) {
    generalButton.setBackground(new java.awt.Color(112, 179, 241));
    generalButton.setBorderPainted(true);
}

private void buttonMouseExited(java.awt.event.MouseEvent evt) {
    generalButton.setBackground(java.awt.Color.white);
    generalButton.setBorderPainted(false);
}

private void buttonMousePressed(java.awt.event.MouseEvent evt) {
    generalButton.setBackground(new java.awt.Color(68, 137, 202));
    generalButton.setBorderPainted(true);
}
Leider ändert sich auf diese Weise der Hintergrund ständig sobald man mit der Maus darüber kommt.
Wenn ein Menüpunkt aber aktiv ist soll die dunkle Farbe beibehalten werden und sich nur die anderen Buttons dementsprechend ändern.

Hat vielleicht jemand einen Tip für mich wie man diesen Schönheitsfehler behebt oder es sogar komplett anders/besser machen könnte?

Vielen Dank im Voraus

greetz derDoc
 
M

MiDniGG

Gast
Machst halt noch nen boolean der sagt markiert true/false und frägst den in MouseEntered ab..
 

Dr.Gibble

Mitglied
Irgendwie komme ich nicht weiter.

Ich hatte es erst versucht mit einer allgemeinen MouseListenerKlasse für alle Buttons aber das lässt Netbeans nicht zu da ich die Gui mit dem Builder erstellt habe.

Jetzt habe ich halt in jedem eigenen Listener einen Verweis auf die jeweilige Operation "mouseEntered, mouseExited & mouseClicked" geschrieben und übergebe ihm den "MouseEvent event" mit.

Aber leider habe ich keine Möglichkeit gefunden den deklarierten Namen des Button abzufragen?
Die Buttons heissen ja bei mir "generalButton", "chartButton", "tableButton" etc und tragen jeweils einen Namen + Icon.

Code:
//generalButton
        generalButton.setBackground(java.awt.Color.white);
        generalButton.setFont(generalButton.getFont());
        generalButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/qRegelkarte/ui/img/32/config32.png"))); // NOI18N
        generalButton.setText("Allgemein");
        generalButton.setToolTipText("");
        generalButton.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        generalButton.setBorderPainted(false);
        generalButton.setFocusable(false);
        generalButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        generalButton.setMaximumSize(new java.awt.Dimension(100, 50));
        generalButton.setMinimumSize(new java.awt.Dimension(100, 50));
        generalButton.setPreferredSize(new java.awt.Dimension(100, 60));
        generalButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        generalButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                generalButtonMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                generalButtonMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                generalButtonMouseExited(evt);
            }
        });
        menuPanel.add(generalButton);

//Listener
private void generalButtonMouseEntered(java.awt.event.MouseEvent evt) {
    mouseEntered(evt);
}

private void generalButtonMouseExited(java.awt.event.MouseEvent evt) {
    mouseExited(evt);
}

private void generalButtonMouseClicked(java.awt.event.MouseEvent evt) {
    mouseClicked(evt);
}
... und dies für jeden Button.

Code:
//Operationen
private void mouseEntered(MouseEvent event) 
{
    JButton b = (JButton) event.getSource();
    System.out.println("Button: " + b.getName());

    while (isActive != true)
    {
        generalButton.setBackground(new java.awt.Color(112, 179, 241));
        generalButton.setBorderPainted(true);
    }
}
private void mouseExited(MouseEvent event) 
{
    System.out.println(event.paramString());

    //event.getButton().setBackground(java.awt.Color.white);
    //event.getComponent().setBorderPainted(false);
}

private void mouseClicked(MouseEvent event)
{
    generalButton.setBackground(new java.awt.Color(68, 137, 202));
    generalButton.setBorderPainted(true);
}

Jetzt bräuchte ich ja über den MouseEvent den Namen des Buttons (nicht den TextName) um zu unterscheiden welcher Button gedrückt wurde und um die Werte zu ändern damit die Operationen dynamisch auf alle Buttons funktionieren.
Statt: generalButton.setBorderPainted(true); sollte dann stehen: derAktuellAktiveButton.setBorderPainted(true);
 

Dr.Gibble

Mitglied
Ich dachte ich könnte es folgendermassen lösen aber leider lag ich damit falsch.

Ich habe jedem jButton den ActionCommand des eigenen Variablennamen gegeben und wollte folgendermassen damit arbeiten:
Code:
private void mouseEntered(MouseEvent evt) 
{
    JButton b = (JButton) evt.getSource();
    String name = b.getActionCommand();
    
    name.setBackground(new java.awt.Color(112, 179, 241));
    name.setBorderPainted(true);
}
Leider geht das so nicht und der Compiler meckert wegen dem "name"

Hat vielleicht noch jemand eine andere Idee wie ich doch noch zu einer sinnvollen Lösung komme?
 

Dr.Gibble

Mitglied
So einfach und dennoch bin ich nicht darauf gekommen.

Ich brauche den ActionCommand gar nicht da ich mir mit dem EventListener ja immer direkt den ganzen Button übergebe. Nun habe ich es wie folgt gelöst und es funktioniert prima:

Code:
private JButton activeButton, markerButton;

generalButton = new javax.swing.JButton();
generalButton.setBackground(java.awt.Color.white);
        generalButton.setFont(generalButton.getFont());
        generalButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/qRegelkarte/ui/img/32/config32.png"))); // NOI18N
        generalButton.setText("Allgemein");
        generalButton.setToolTipText("");
        generalButton.setActionCommand("generalButton");
        generalButton.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        generalButton.setBorderPainted(false);
        generalButton.setFocusable(false);
        generalButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        generalButton.setMaximumSize(new java.awt.Dimension(100, 50));
        generalButton.setMinimumSize(new java.awt.Dimension(100, 50));
        generalButton.setPreferredSize(new java.awt.Dimension(100, 60));
        generalButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        generalButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                generalButtonMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                generalButtonMouseExited(evt);
            }
        });
        generalButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                generalButtonActionPerformed(evt);
            }
        });
        menuPanel.add(generalButton);


//MouseButtonListener
private void generalButtonMouseEntered(java.awt.event.MouseEvent evt) {                                           
    mouseEntered(evt);
}                                          

private void generalButtonMouseExited(java.awt.event.MouseEvent evt) {                                          
    mouseExited(evt);
}                                         

private void generalButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
    buttonActionPerformed(evt);
}

Code:
private void mouseEntered(MouseEvent evt) 
{
    activeButton = (JButton) evt.getSource();
    
    if ( markerButton != activeButton )
    {
        activeButton.setBackground(new java.awt.Color(112, 179, 241));
        activeButton.setBorderPainted(true);
    }
}

private void mouseExited(MouseEvent evt) 
{
    activeButton = (JButton) evt.getSource();
    
    if ( markerButton != activeButton )
    {
        activeButton.setBackground(java.awt.Color.white);
        activeButton.setBorderPainted(false);
    }
}

private void buttonActionPerformed(ActionEvent evt)
{
    //hole den Button der das Event ausgelöst hat
    activeButton = (JButton) evt.getSource();
    
    //setze neue Werte für den aktiven Button
    activeButton.setBackground(new java.awt.Color(68, 137, 202));
    activeButton.setBorderPainted(true);
    
    if ( markerButton != null)
    {
        //setze diesen wieder auf die Ursprungswerte
        markerButton.setBackground(java.awt.Color.white);
        markerButton.setBorderPainted(false);
    }
   
    //übergeben den aktiven Button an den marker Button
    markerButton = activeButton;
}
 

Dr.Gibble

Mitglied
Hallo miteinander,

ich benutze mein oben geschildertes Design jetzt schon seid einiger Zeit im Projekt und bin auch sehr damit zufrieden.

Leider muss ich jetzt eine Option zur Verfügung stellen die das gesamte LookandFeel der GUI mit diversen freien Designs verändert.
Realisieren lässt sich das ganze ja sehr einfach mit folgender Zeile:
Code:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Nur leider wird dabei auch mein hübsches Design des Konfigurationsmenüs überschrieben und an das jeweils gesetzte LookandFeel angepasst.

Da ich in der gesamten GUI aber noch mehrere normale jButtons habe die sich natürlich auch ändern dürfen nur die Paar aus dem Konfigurationsmenü nicht bräuchte ich nochmals Euren Rat wie man so etwas am besten realisiert.

Vielen Dank im Voraus

derDoc
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
X ImageIcon für JButton AWT, Swing, JavaFX & SWT 4
X JButton "effect" für ImageIcon AWT, Swing, JavaFX & SWT 6
D JButton einen neuen ImageIcon setzen? AWT, Swing, JavaFX & SWT 2
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
1 JButton nach Klick ausblenden AWT, Swing, JavaFX & SWT 6
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben