2012-04-06 4 views
0

Ich wollte eine Schaltfläche, die transparent ist, bis der Benutzer mit der Maus darüber schwebt, so dass ich meine eigene Klasse erstellt, die JButton erweitert. Ich habe es getestet und es macht den Knopf transparent und erkennt, wenn der Benutzer darüber schwebt, aber macht es danach nicht undurchsichtig. Was muss ich mit diesem Code ändern?JButton Unterklasse nicht ändern Transparenz

import javax.swing.*; 
import java.awt.event.*; 

public class TransparentButton extends JButton { 

    boolean opaque = false, areaFilled = false, borderPainted = false; 

    public TransparentButton(Icon icon) { 
     super(icon); 
     initialise(); 
    } 

    public TransparentButton(String text) { 
     super(text); 
     initialise(); 
    } 

    private void initialise() { 
     super.setOpaque(opaque); 
     super.setContentAreaFilled(areaFilled); 
     super.setBorderPainted(borderPainted); 
     super.addMouseListener(new MouseListener() { 
      public void mouseEntered(MouseEvent e) { 
       opaque = true; 
       areaFilled = true; 
       borderPainted = true; 
      } 

      public void mouseExited(MouseEvent e) { 
       opaque = false; 
       areaFilled = false; 
       borderPainted = false; 
      } 

      public void mouseClicked(MouseEvent e) {} 
      public void mousePressed(MouseEvent e) {} 
      public void mouseReleased(MouseEvent e) {} 
     }); 
    } 
} 

Antwort

1
import javax.swing.*; 
import java.awt.event.*; 

public class TransparentButton extends JButton { 

    boolean opaque = false, areaFilled = false, borderPainted = false; 

    public TransparentButton(Icon icon) { 
     super(icon); 
     initialise(); 
    } 

    public TransparentButton(String text) { 
     super(text); 
     initialise(); 
    } 

    private void initialise() { 

     super.addMouseListener(new MouseListener() { 
      public void mouseEntered(MouseEvent e) { 
       opaque = true; 
       areaFilled = true; 
       borderPainted = true; 
       reset(); 

      } 

      public void mouseExited(MouseEvent e) { 
       opaque = false; 
       areaFilled = false; 
       borderPainted = false; 
       reset(); 
      } 

      public void mouseClicked(MouseEvent e) {} 
      public void mousePressed(MouseEvent e) {} 
      public void mouseReleased(MouseEvent e) {} 
     }); 
    } 

    private void reset() { 
     super.setOpaque(opaque); 
     super.setContentAreaFilled(areaFilled); 
     super.setBorderPainted(borderPainted); 
    } 
} 
+0

Vielen Dank. Das macht Sinn! – sticks

0

Das Einstellen der Variablen ist nicht ausreichend. Sie müssen auch die entsprechenden Methoden auf der Schaltfläche aufrufen:

S.S: Ich habe es nicht getestet. Aber das scheint logisch offensichtlich enoguh

1

boolean opak = false, areaFilled = false, borderPainted = false; Die Felder opaque, areaFilled und borderPainted sind lokale Variablen für Ihre Calss. Änderung es nicht Auswirkungen Abendessen Klasse!

Es gibt viel Logik hinter der setOpaque, setContentAreaFilled und setBorderPainted Methoden Sie es