Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 缩放JCheckBox框_Java_Swing_User Interface_Jcheckbox - Fatal编程技术网

Java 缩放JCheckBox框

Java 缩放JCheckBox框,java,swing,user-interface,jcheckbox,Java,Swing,User Interface,Jcheckbox,我想缩放一个JCheckBox,例如,与设置的文本字体大小相等。例如,当我增加字体大小时,复选框本身保持较小,但应随着文本的增长而增大,或者我想自己设置框的大小: JCheckBox chckbxTest = new JCheckBox("Test"); chckbxTest.setFont("Arial", Font.BOLD, 27)); 如果可能,我需要为JRadioButton提供相同的功能。不幸的是,我还没有找到任何关于此功能的文档 解决方案: 有标记的答案帮助我创建了一个完全可伸

我想缩放一个
JCheckBox
,例如,与设置的文本字体大小相等。例如,当我增加
字体
大小时,复选框本身保持较小,但应随着文本的增长而增大,或者我想自己设置框的大小:

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();
    }
}
例如,当我增加字体大小时,复选框本身保持较小,但它应该随着文本的增长而增长,或者我想自己设置框的大小

然后,您需要为文本的字体大小提供自定义图标。请参阅以下方法:

setIcon(....)
setSelectedIcon(...)

对于JRadioButton,您也需要这样做。此外,每个LAF都需要不同的图标。

+1似乎我误解了这个问题。我想这是关于整个组件的大小而不仅仅是图标。太好了,谢谢。正是我需要的。我在nice动态解决方案上面添加了一个完整的示例。您使用的
fontsize
变量是什么?我尝试了你的代码,但是fontsize初始化丢失了。然后我在构造函数中更改了它以获得dim值,它工作得很好。请让我知道这样做是否正确,或者fontsize是否意味着其他内容,并相应地编辑您的帖子。尽管如此,你的代码还是非常好,它帮助了我。