저는 입니다. 반투명 JPanel입니다. JButton을 확장하여 커스텀 JButton을 만들었습니다. 둥근 모서리가있는 버튼이 필요하고 그것에 몇 가지 효과를 추가하고 싶었습니다. 불투명하지 않은 버튼을 만들었습니다. 반투명 한 JPanel에이 버튼을 추가하면 멋지게 나옵니다. 그러나 롤오버에서 검은 색 패치는 정말 엉터리로 보이는 버튼 뒤에 그려져 있습니다. 나는 그물을 찾기 위해 해결책을 찾았지만 유용한 것을 찾을 수 없었다. 이 문제는 또한 http://www.java.net/node/661798에 설명되어 있습니다하지만 난 정말 ..... 어떤 도움이 당신이 추가 할 필요가 생각투명한 JButton은 여전히 그 배경을 페인팅합니다.
답변
을 이해할 수있을 것이다 kirillcool의 제안이 운동 할 수 없습니다 : 사람의 경우
가button.setContentAreaFilled(false);
예이 작품은 매우 효과적입니다 –
확실하지 여전히 관심이 있습니다 ... 메서드를 재정 의하여 문제를 해결할 수 있습니다. 원하는 모양으로 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);
}
단일 속성을 구성 할 때 사용자 정의 코드를 작성하지 마십시오 :-) btw : Java 명명 규칙을 배우고 그대로 사용하십시오. 그들. – kleopatra
하지 질문에 대한 답변,하지만 당신은/다운로드 다른 모양을 사용 & 대신 쓰기의 느낌 노력이에 너 스스로? 내 마지막 프로젝트에서 synthetica를 사용했는데 꽤 좋았고 "훌륭했습니다" – Kaj