나는 기본적으로 SynthStyle, SynthPainter 및 SynthStyleFactory의 커스텀 버전을 제공하면서 Synth를 사용하여 사용자 정의 "Steampunk"테마 룩앤필을 구현하려고합니다.커스텀 Synth Look & Feel의 체크 박스 레이아웃 제어하기
XML을 사용하지 않고 있습니다. 즉, 모든 것이 Java API를 통해 수행됩니다. 일반적으로 이것은 잘 작동하고 실제로 꽤보기 흉하게 보이기 시작합니다.
그러나 JCheckBox와 같은 일부 "복합"구성 요소에 문제가 있습니다. SynthPainter로 paintCheckBoxBackground()가 불려 갔을 때, 좌표는 JCheckBox가 가리키는 전체 영역을 참조합니다.
이 영역에서 확인란 아이콘과 텍스트를 별도로 그려야하는 위치를 어떻게 결정해야합니까? 여기에만 가장 일반적인 경우로 촬영되어,
public void paintCheckBoxBackground(SynthContext context, Graphics g, int x, int y, int w, int h){
AbstractButton c = (AbstractButton) context.getComponent();
String text = c.getText();
Icon icon = c.getIcon();
if (icon == null){
icon = context.getStyle().getIcon(context, "CheckBox.icon");
};
int iconTextGap = c.getIconTextGap();
Rectangle componentRect = new Rectangle();
Rectangle iconR = new Rectangle();
Insets insets = new Insets(0, 0, 0, 0);
if (context.getRegion().isSubregion()){
insets = context.getStyle().getInsets(context, insets);
}
else{
insets = context.getComponent().getInsets(insets);
}
componentRect.x = insets.left;
componentRect.y = insets.top;
componentRect.width = c.getWidth() - (insets.left + insets.right);
componentRect.height = c.getHeight() - (insets.top + insets.bottom);
if (icon != null){
iconR.x += componentRect.x;
iconR.y += componentRect.y;
iconR.width = icon.getIconWidth();
iconR.height = icon.getIconHeight();
g.setColor(Color.GREEN);
g.fillRect(iconR.x, iconR.y, iconR.width, iconR.height);
}
if (text != null){
g.setColor(Color.RED);
int textPos = iconR.x + iconR.width + iconTextGap;
g.fillRect(textPos, iconR.y, c.getWidth() - insets.right - textPos, componentRect.height);
}
}
하시기 바랍니다 고려 :
는
감사합니다 - 이것은 매우 유용한 예제 코드입니다! 그래서 기본적으로 paintCheckBoxBackground 코드는 텍스트와 체크 마크 아이콘을 모두 그리는 역할을합니까? – mikera
@mikera 배경 그림. UI Delegate ('SynthCheckBoxUI', 텍스트 페인팅 코드는'SynthButtonUI','paint (SynthContext context, Graphics g)')는 텍스트와 아이콘 자체를 페인팅합니다. – Taisin
위대한, 지금 완벽하게 작동합니다 - 많은 도움을 주셔서 감사합니다 !! – mikera