Nimbus 룩앤필에서 JButton은 둥근 테두리와 멋진 배경을 가진 매우 깔끔하고 정확한 모양을 가지고 있습니다.
JPanel을 아주 똑같은 모양으로 렌더링하고 싶습니다. (분명히 눌린 상태 등은 없습니다).
내 옵션에는 어떤 것이 있습니까?JPanel을 Nimbus JButton으로 그리는 방법은 무엇입니까?
3
A
답변
5
JPanel에서 "Button look"을 얻는 가장 쉬운 방법은 JPanel
을 확장하고 paintComponent
을 무시하는 것입니다.
여기 후광 JButton
모습입니다 :
그리고 여기가 JPanel
에 비슷한 모양의 내 구현 (I이 예를 도시 주변에 빈 상태 (empty)의 경계를 추가하고, 모서리 반투명 없습니다) :
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_ANTIALIAS_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을 참조하십시오.
관련 문제
- 1. 캔버스에 JPanel을 그리는 방법은 무엇입니까?
- 2. 고정 위치에서 JPanel을 그리는 방법은 무엇입니까?
- 3. JButton으로 환경 설정을 저장하는 방법은 무엇입니까?
- 4. JPanel을 투명하게 만드는 방법은 무엇입니까?
- 5. JPanel에서 도형 그리는 방법은 무엇입니까?
- 6. 하나의 Jbutton으로 여러 Jtextfields
- 7. 커스텀 JButton으로 Java (Swing)에서 JOptionPane.showOptionDialog 박스를 만드는 방법은 무엇입니까?
- 8. 자바로 채워진 원을 그리는 방법은 무엇입니까?
- 9. 이미지에서지도를 그리는 방법은 무엇입니까?
- 10. 차트를 그리는 방법은 무엇입니까?
- 11. JButton에 컬러 사각형을 그리는 방법은 무엇입니까?
- 12. JPanel을 다른 JPanel으로 바꾸는 방법은 무엇입니까?
- 13. JPanel을 스크롤 가능하게 만드는 방법은 무엇입니까?
- 14. JFrame에서 JPanel을 "포장"하는 방법은 무엇입니까?
- 15. JFrame에서 여러 JPanel을 구성하는 좋은 방법은 무엇입니까?
- 16. JPanel을 JTable 셀에 할당하는 방법은 무엇입니까?
- 17. JScrollPane 안에 JPanel을 표시하는 방법은 무엇입니까?
- 18. jpanel을 대화 상자에 넣는 방법은 무엇입니까?
- 19. jquery에서 JPanel을 동적으로 만드는 방법은 무엇입니까?
- 20. JPanel을 더 잘 부착하는 이유는 무엇입니까?
- 21. 비트 맵에서 그리는 방법은 없지만 투명 픽셀에서 그리는 방법은 무엇입니까?
- 22. 지도에서 경로를 그리는 방법은 무엇입니까?
- 23. 애니메이션으로 선을 그리는 방법은 무엇입니까?
- 24. SplitterPanel에 System.Drawing.Icon을 그리는 방법은 무엇입니까?
- 25. QGraphicsView의 장면을 그리는 방법은 무엇입니까?
- 26. UIView에서 도트를 그리는 방법은 무엇입니까?
- 27. Piccolo2D에서 곡선을 그리는 방법은 무엇입니까?
- 28. 창을 다시 그리는 방법은 무엇입니까?
- 29. Qt에서 'x'를 그리는 방법은 무엇입니까?
- 30. android에서지도에 오버레이를 그리는 방법은 무엇입니까?
오케이, 나는 그 질문을 보았다. 그것은 매우 intresting했다. 국경을 위해, 단추에 할당 된 것과 유사한 것을 얻을 수있는 아이디어가 있습니까? – AgostinoX
@AgostinoX : 같은 모양을 쉽게 얻을 수있는 방법이 없다고 생각합니다. 당신은'JPanel'에서'paintComponent'를 오버라이드하고 자신의 그라디언트를 그려야합니다. – Jonas
@AgostinoX : 코드 및 스크린 샷으로 내 업데이트를 확인하십시오. – Jonas