2011-12-12 6 views

답변

5

JPanel에서 "Button look"을 얻는 가장 쉬운 방법은 JPanel을 확장하고 paintComponent을 무시하는 것입니다.

여기 후광 JButton 모습입니다 :

enter image description here

그리고 여기가 JPanel에 비슷한 모양의 내 구현 (I이 예를 도시 주변에 빈 상태 (empty)의 경계를 추가하고, 모서리 반투명 없습니다) :

: 여기

enter image description here

()가 gradients를 사용하여 내 코드입니다
public class ColorDemo extends JPanel { 

    private final int gradientSize = 18; 
    private final Color lighterColor = new Color(250, 250, 250); 
    private final Color darkerColor = new Color(225, 225, 230); 
    private final Color edgeColor = new Color(140, 145, 145); 
    private final Stroke edgeStroke = new BasicStroke(1); 
    private final GradientPaint upperGradient = new GradientPaint(
      0, 0, lighterColor, 
      0, gradientSize, darkerColor); 


    @Override 
    public void paintComponent(Graphics g) { 
     Graphics2D g2 = (Graphics2D)g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
          RenderingHints.VALUE_ANTIALIAS_ON); 
     GradientPaint lowerGradient = new GradientPaint(
       0, getHeight()-gradientSize-1, darkerColor, 
       0, getHeight(), lighterColor); 
     g2.setPaint(upperGradient); 
     g2.fillRect(0, 0, getWidth()-1 , gradientSize); 
     g2.setPaint(darkerColor); 
     g2.fillRect(0, gradientSize, getWidth()-1, getHeight()-gradientSize-1); 
     g2.setPaint(lowerGradient); 
     g2.fillRect(0, getHeight()-gradientSize, getWidth()-1, getHeight()-1); 
     g2.setStroke(edgeStroke); 
     g2.setPaint(edgeColor); 
     g2.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 
           gradientSize/2, gradientSize/2); 
    } 
} 

UPDATE 여기

내 코드의 코너 문제를 해결AgostinoX 의해 개선 paintComponent 방법이다.

@Override 
    public void paintComponent(Graphics g) { 

     Graphics2D g2 = (Graphics2D) g; 
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
          RenderingHints.VALUE_ANTIALI‌​AS_ON); 
     float gradientPerc = (float)gradientSize/getHeight(); 
     LinearGradientPaint lgp = new LinearGradientPaint(0,0,0,getHeight()-1, 
      new float[] {0, gradientPerc, 1-gradientPerc, 1f}, 
      new Color[] {lighterColor, darkerColor, darkerColor, lighterColor}); 
     g2.setPaint(lgp); 
     g.fillRoundRect(0, 0, getWidth()-1, getHeight()-1, 
      gradientSize, gradientSize); 
     g2.setColor(edgeColor); 
     g2.setStroke(edgeStroke); 
     g.drawRoundRect(0, 0, getWidth()-1, getHeight()-1, 
      gradientSize, gradientSize); 
    } 

또한 모양을 사용자 정의하고 후광에 대해 느낄 수있는 방법에 대한 How to hide the arrow buttons in a JScrollBar에 대한 내 대답을 참조하십시오. 그리고 색과 화가에 대해서는 Nimbus defaults을 참조하십시오.

+0

오케이, 나는 그 질문을 보았다. 그것은 매우 intresting했다. 국경을 위해, 단추에 할당 된 것과 유사한 것을 얻을 수있는 아이디어가 있습니까? – AgostinoX

+0

@AgostinoX : 같은 모양을 쉽게 얻을 수있는 방법이 없다고 생각합니다. 당신은'JPanel'에서'paintComponent'를 오버라이드하고 자신의 그라디언트를 그려야합니다. – Jonas

+1

@AgostinoX : 코드 및 스크린 샷으로 내 업데이트를 확인하십시오. – Jonas

관련 문제