我想缩放JCheckBox
,例如同样适用于其设置文本的字体大小。例如,当我增加Font
大小时,复选框本身保持较小但它应该随文本增长,或者我想自己设置框的大小:
JCheckBox chckbxTest = new JCheckBox("Test");
chckbxTest.setFont("Arial", Font.BOLD, 27));
如果可能,我需要JRadioButton
的相同功能。不幸的是,我没有找到任何有关此功能的文档。
解决方案:
明确的答案帮助我创建了一个完全可扩展的自己风格的JCheckbox。以下示例在选中时绘制一个填充了另一个矩形的简单矩形:
[...]
JCheckBox myCheckBox = new JCheckBox("Test");
myCheckBox.setIcon(new SimpleCheckboxStyle(20));
[...]
class SimpleCheckboxStyle implements Icon {
int dim = 10;
public SimpleCheckboxStyle (int dimension){
this.dim = dimension;
}
protected int getDimension() {
return dim;
}
public void paintIcon(Component component, Graphics g, int x, int y) {
ButtonModel buttonModel = ((AbstractButton) component).getModel();
int y_offset = (int) (component.getSize().getHeight() / 2) - (int) (getDimension() / 2);
int x_offset = 2;
if (buttonModel.isRollover()) {
g.setColor(new Color(0, 60, 120));
} else if (buttonModel.isRollover()) {
g.setColor(Color.BLACK);
} else {
g.setColor(Color.DARK_GRAY);
}
g.fillRect(x_offset, y_offset, fontsize, fontsize);
if (buttonModel.isPressed()) {
g.setColor(Color.GRAY);
} else if (buttonModel.isRollover()) {
g.setColor(new Color(240, 240, 250));
} else {
g.setColor(Color.WHITE);
}
g.fillRect(1 + x_offset, y_offset + 1, fontsize - 2, fontsize - 2);
if (buttonModel.isSelected()) {
int r_x = 1;
g.setColor(Color.GRAY);
g.fillRect(x_offset + r_x + 3, y_offset + 3 + r_x, fontsize - (7 + r_x), fontsize - (7 + r_x));
}
}
public int getIconWidth() {
return getDimension();
}
public int getIconHeight() {
return getDimension();
}
}
答案 0 :(得分:3)
例如,当我增加字体大小时,复选框本身保持较小但它应该随文本增长,或者我想自己设置框的大小
然后,您需要为文本的字体大小提供自定义图标。请参阅以下方法:
setIcon(....)
setSelectedIcon(...)
您需要对JRadioButton执行相同的操作。此外,每个LAF都需要不同的图标。