2012-04-06 3 views
0

사용자가 마우스를 가져갈 때까지 투명하게 단추를 만들고 싶었 기 때문에 JButton을 확장하는 자체 클래스를 만들었습니다. 나는 그것을 테스트하고 버튼을 투명하게 만들고 사용자가 마우스를 가리키면 감지하지만 나중에 불투명하게 만들지는 않습니다. 이 코드를 변경하려면 무엇이 필요합니까?JButton 하위 클래스가 투명도를 변경하지 않음

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

답변

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

감사합니다. 이것은 의미가 있습니다! – sticks

0

변수를 설정하는 것만으로는 충분하지 않습니다. 당신은뿐만 아니라 버튼의 적절한 방법을 호출해야합니다 :

 public void mouseEntered(MouseEvent e) { 
       super.setOpaque(true); 
       super.setContentAreaFilled(true); 
       super.setBorderPainted(true); 

     } 

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

     } 

P.S : 나는 그것을 테스트 did't. 그러나 이것은 명백한 enoguh 논리적으로 보인다

1

부울 불투명 = 거짓, areaFilled이 = 거짓, borderPainted를 = 거짓; 필드 opaque, areaFilled 및 borderPainted는 사용자의 지역 변수입니다. 변경하면 저녁 식사 시간에는 영향을 미치지 않습니다!

당신이 MouseMotionListener을 추가 할 필요가 당신의 코드를 그것을

1
  • 를 사용해야하지만, 더 나은 마우스 ChangeListener

  • 것 setOpaque, setContentAreaFilled의 뒤에 논리의 많은 및 setBorderPainted 방법이있다/변경 이벤트 값을 변경해야합니다 AlphaComposite

관련 문제