将JToggleButton ImageIcon居中

时间:2012-11-17 13:32:06

标签: java swing alignment imageicon jtogglebutton

我创建了一个JToggleButton,当它被选中时,会显示图像。除了图像不以按钮为中心外,一切都很完美。图像的左上角位于按钮的中心点,然后图像向下并朝向按钮的右下角。

JToggleButton LayoutButton = new JToggleButton();
LayoutButton.setIcon(new ImageIcon());
LayoutButton.setSelectedIcon(new ImageIcon("Image.png"));

我是如何将图像居中的?

由于

2 个答案:

答案 0 :(得分:3)

问题是您的初始图像与所选图像的尺寸不匹配,因此,在这种情况下,所选图像将显示在不同的位置,右下角。

您可以为初始的“未选定”图片创建占位符:

public class PlaceHolderIcon implements Icon {

    private final int width;
    private final int height;

    public PlaceHolderIcon(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public int getIconHeight() {
        return height;
    }

    public int getIconWidth() {
        return width;
    }

    public void paintIcon(Component c, Graphics g, int x, int y) {
    }
}

并将您的第一个零维图像替换为:

ImageIcon selectedIcon = new ImageIcon("Image.png");
Image image = selectedIcon.getImage();
PlaceHolderIcon placeHolderIcon = new PlaceHolderIcon(image.getWidth(this), image.getHeight(this));
JToggleButton layoutButton = new JToggleButton();
layoutButton.setIcon(placeHolderIcon);
layoutButton.setFocusPainted(false);
layoutButton.setSelectedIcon(selectedIcon);

答案 1 :(得分:1)

您应该使用JToggleButton的setHorizontalAlignment(...)setVerticalAlignment(...)方法(实际上是AbstractButton)。将SwingConstants.CENTER作为参数传递给所有人。

虽然请注意,horizo​​ntalAlignment和verticalAlignment属性的默认值已经是SwingConstants.CENTER。因此,如果这没有帮助,请考虑发布一个小的可编辑和可运行的程序,该程序使用现有的网络图像向我们展示您的问题,sscce以及发布当前按钮的图像等。