2011-05-08 3 views
4

저는 입니다. 반투명 JPanel입니다. JButton을 확장하여 커스텀 JButton을 만들었습니다. 둥근 모서리가있는 버튼이 필요하고 그것에 몇 가지 효과를 추가하고 싶었습니다. 불투명하지 않은 버튼을 만들었습니다. 반투명 한 JPanel에이 버튼을 추가하면 멋지게 나옵니다. 그러나 롤오버에서 검은 색 패치는 정말 엉터리로 보이는 버튼 뒤에 그려져 있습니다. 나는 그물을 찾기 위해 해결책을 찾았지만 유용한 것을 찾을 수 없었다. 이 문제는 또한 http://www.java.net/node/661798에 설명되어 있습니다하지만 난 정말 ..... 어떤 도움이 당신이 추가 할 필요가 생각투명한 JButton은 여전히 ​​그 배경을 페인팅합니다.

+1

하지 질문에 대한 답변,하지만 당신은/다운로드 다른 모양을 사용 & 대신 쓰기의 느낌 노력이에 너 스스로? 내 마지막 프로젝트에서 synthetica를 사용했는데 꽤 좋았고 "훌륭했습니다" – Kaj

답변

7

을 이해할 수있을 것이다 kirillcool의 제안이 운동 할 수 없습니다 : 사람의 경우

button.setContentAreaFilled(false); 
+0

예이 작품은 매우 효과적입니다 –

0

확실하지 여전히 관심이 있습니다 ... 메서드를 재정 의하여 문제를 해결할 수 있습니다. 원하는 모양으로 Java에서 JButton을 그릴 수 있습니다. setBackground() 메서드를 사용하여 Graphics 객체의 배경을 투명하게 설정하면됩니다. 또한 그래픽 객체를 clearRect() 메소드로 그리기 전에 지우고 다시 JButton의 배경 알파 레벨로 채워야합니다. 여기에 내 코드 조각이 있습니다.이 코드는 재정의 된 paintComponent()을 보여줍니다. 당신에 붙여 넣어 JButton 당신은 둥근 가장자리와 JButton을 경우에도 가야의 반 transparant 배경

private int outerRoundRectSize = 10; 
private int innerRoundRectSize = 8; 

public void paintComponent(Graphics g) 
{ 
    int h = getHeight(); 
    int w = getWidth(); 

    Graphics2D g2d = (Graphics2D) g.create(); 
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 

    Color GP = null; 

    //////////////get rid of the black background//////////////////////// 
    g2d.setBackground(new Color(0,0,0,0.0f)); 
    g2d.clearRect(0, 0, w, h); 
    g2d.setPaint(new Color(0,0,0,0.3f)); 
    g2d.fillRect(0, 0, w, h); 
    //////////////get rid of the black background//////////////////////// 

    ButtonModel model = getModel(); 
    if(!model.isEnabled()) 
    { 
     setForeground(Color.GRAY); 
     GP = new Color(0.5f,0.2f,0.6f); 
    } 
    else 
    { 
     setForeground(Color.WHITE); 
     if(model.isRollover()) 
     { 
      GP = new Color(0.5f,0.2f,0.6f); 
     } 
     else 
     { 
      GP = new Color(0.0f,1.0f,0.0f); 
     } 
    } 
    g2d.setPaint(GP); 
    Color p1 = null; 
    Color p2 = null; 

    if(getModel().isPressed()) 
    { 
     GP = new Color(1.0f,0.0f,0.0f); 
     g2d.setPaint(GP); 
     p1=new Color(0.12f,0.7f,0.3f); 
     p2=new Color(0.7f,0.5f,0.6f); 
    } 
    else 
    { 
     p1=new Color(0.0f,0.5f,0.7f); 
     p2=new Color(0.0f,1.0f,1.0f); 
     GP = new Color(0.0f,0.0f,1.0f); 
    } 

    RoundRectangle2D.Float r2d = new RoundRectangle2D.Float(0, 0, w - 1, h - 1, outerRoundRectSize, outerRoundRectSize); 
    Shape clip = g2d.getClip(); 
    g2d.clip(r2d); 
    //g2d.fillRect(0, 0, w, h); 
    g2d.fillRoundRect(0, 0, w, h, outerRoundRectSize, outerRoundRectSize); 
    g2d.setClip(clip); 
    g2d.setPaint(p1); 
    g2d.drawRoundRect(0, 0, w - 1, h - 1, outerRoundRectSize,outerRoundRectSize); 
    g2d.setPaint(p2); 
    g2d.drawRoundRect(1, 1, w - 3, h - 3, innerRoundRectSize,innerRoundRectSize); 

    g2d.dispose(); 
    super.paintComponent(g); 
} 
+0

단일 속성을 구성 할 때 사용자 정의 코드를 작성하지 마십시오 :-) btw : Java 명명 규칙을 배우고 그대로 사용하십시오. 그들. – kleopatra