2013-05-31 6 views
1

JButton의 페인트 구성 요소를 재정의했습니다. 그러나 클릭하면 어두워지지 않습니다. Google과 스택 오버플로를 검색했지만 답변이없는 것 같습니다. 그러면 클릭을 끝내면 클릭 한 다음 정상으로 돌아가려면 버튼을 더 어둡게 표시하려면 어떻게해야합니까?JButton을 아래쪽에서 위로 켭니다.

@Override 
protected void paintComponent(Graphics g){ 
    super.paintComponent(g); 

    Graphics2D g2 = (Graphics2D)g.create(); 
    RenderingHints qualityHints = 
      new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
    g2.setRenderingHints(qualityHints); 
    g2.setPaint(new GradientPaint(
      new Point(0, 0), 
      BUTTON_TOP_GRADIENT, 
      new Point(0, getHeight()), 
      BUTTON_BOTTOM_GRADIENT)); 
    g2.fillRoundRect(0, 0, getWidth(), getHeight(), 10, 10); 
    g2.dispose(); 


} 
+2

사용'ButtonModel' –

답변

3

하단에이 코드는 나를 위해 작동 :

여기 내 코드입니다. 작동 방식은 다음과 같습니다.

버튼이 클릭되었는지 확인하려면 버튼의 모델을 확인하십시오. 클릭하면 다르게 그려집니다.

package com.sandbox; 

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

public class SwingSandbox { 

    public static void main(String[] args) { 

     JFrame frame = buildFrame(); 
     frame.add(new MyButton()); 
    } 

    private static class MyButton extends JButton { 


     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 

      Color color; 

      if (getModel().isPressed()) { 
       color = new Color(0, 0, 0); 
      } else { 
       color = new Color(0, 0, 255); 
      } 

      Graphics2D g2 = (Graphics2D) g.create(); 
      RenderingHints qualityHints = 
        new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
      qualityHints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); 
      g2.setRenderingHints(qualityHints); 
      g2.setPaint(new GradientPaint(
        new Point(0, 0), 
        color, 
        new Point(0, getHeight()), 
        new Color(255, 255, 0))); 
      g2.fillRoundRect(0, 0, getWidth(), getHeight(), 10, 10); 
      g2.dispose(); 


     } 
    } 


    private static JFrame buildFrame() { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.setSize(200, 200); 
     frame.setVisible(true); 
     return frame; 
    } 


} 
+2

은 내가'MouseListener'을 등록하고 자신의'boolean' 플래그를 롤백 할 필요가있다 생각하지 않습니다. [ButtonModel # isPressed'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/ButtonModel.html#isPressed%28%29)와 같이 버튼 모델을 쿼리하기 만하면됩니다. – mre

+1

@mre 코멘트 주셔서 감사합니다. 그에 따라 코드를 업데이트했습니다. –

관련 문제