확장 된 JToggleButton의 paintComponent 메소드를 오버라이드하여 버튼을 토글 할 때 텍스트에 대한 TexturePaint 채우기를 사용할 수있게했습니다. 내가 겪고있는 문제는 내 모양과 느낌이 같은 글꼴을 사용하여 텍스트를 그리는 것처럼 보일 수 없다는 것입니다. 나는 g2d.setFont (this.getFont())를 시도했다. 여기서 "this"는 내가 작업하고있는 버튼입니다. 글꼴은 가깝지만 그리면 기본 텍스트보다 굵게 보입니다. 색상을 저장하지 않고 기본값과 똑같이 보이는 텍스트를 그리는 더 좋은 방법이 있습니까? 미리 감사드립니다!자바로 텍스트 그리기, 모양과 느낌 문제
답변
당신은 다음의 paintComponent() 메소드 그래픽 OBJ를 무시하는 경우 요령은 토글 버튼의 글꼴을 갖도록 이미 구성되어 있어야합니다. 그 차이는 기본적으로 켜지지 않는 앤티 앨리어싱 때문일 수 있습니다.
아주 한정된 테스트에서 저에게 도움이되는 코드를 발견했습니다. 상기의 paintComponent() 메소드에 다음을보십시오 :이 게시물에 경고했다
Graphics2D g2 = (Graphics2D)g.create();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Map map = (Map)(toolkit.getDesktopProperty("awt.font.desktophints"));
if (map != null)
{
g2.addRenderingHints(map);
}
g2.drawString(...);
g2.dispose();
-How to set text above and below a JButton icon? -이 모든 플랫폼 및 LAF의에서 작동하지 않습니다. 주석은 텍스트를 그리는 방법에 대한 제안 된 해결책을 제시합니다.
JLabel을 BufferedImage에 페인팅하는 방법 (링크 된 포스트의 Kleopatra에서 제안한대로)? – bendicott
[Screen Image] (http://tips4java.wordpress.com/2008/10/13/screen-image/) 클래스를 사용할 수 있습니다. 내가 제안한 코드를 사용해 보았습니까? 문제가 있었습니까? – camickr
내 코드에서 버그를 발견했습니다. 게시 한 코드가 실제로 작동합니다! 이제는 텍스트를 올바르게 배치해야하며 잘 갈 수 있습니다. 도와 주셔서 감사합니다! – bendicott
이 질문은 비슷하며 답변을 제공합니다 How do I get the default font for Swing JTabbedPane labels?
내가 키가 어떻게 될지 매우 확실하지 않다, 그러나 그 대답은 다음 당신은 시도 할 수 있습니다 :
UIManager.getLookAndFeelDefaults().getFont("ToggleButton.font");
편집을
이것은 연결된 질문의 코드 단편은 아니지만 약간의 테스트를 마치면 :
01과 같습니다.UIManager.getDefaults().getFont("ToggleButton.font");
이것은 링크 된 질문에 제공된 코드입니다.
EDIT 2
나는 해결책을 찾은 것 같아요. 반환 기본 내가 라인 샘플이 주위에있어, 단지 일반 글꼴입니다 : (추악한하지 않도록하기 위해)
this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.getFont().getStyle(), this.getFont().getSize()));
나의 제안하는 것은 기본 글꼴 스타일 및 크기에 대한 몇 가지 개인 속성을 추가입니다
fontStyle = this.getFont().getStyle();
fontSize = this.getFont().getSize();
을 그리고 당신은 함께 청소 수 : 클래스는 (당신은 생성자를 설정할 수 있습니다)
this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.fontStyle, this.fontSize));
더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –