gpt4 book ai didi

java - 控制自定义 Synth 外观和感觉中复选框的布局

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:35 26 4
gpt4 key购买 nike

我正在尝试使用 Synth 实现自定义的“ Steam 朋克”主题外观 - 基本上提供 SynthStyle、SynthPainter 和 SynthStyleFactory 的自定义版本。

我没有使用任何 XML,即一切都是通过 Java API 完成的。总的来说,这工作得很好,而且实际上开始看起来相当不错。

但是,我在使用一些“复合”组件(例如 JCheckBox)时遇到了问题。当在 SynthPainter 上调用 PaintCheckBoxBackground() 时,坐标指的是 JCheckBox 覆盖的整个区域。

我应该如何确定需要在该区域的何处分别绘制复选框图标和文本?

最佳答案

嗯,mb以下内容会有所帮助(代码将放入与 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);
}
}

请注意,这里仅考虑最常见的情况(左右对齐,图标的文本右侧)。对于更复杂的情况处理,请参阅 SwingUtilities.layoutCompoundLabel

的源代码

关于java - 控制自定义 Synth 外观和感觉中复选框的布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3207321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com