2

我创建了一个 JToggleButton 并在选择它时显示图像。除了图像没有以按钮为中心外,这一切都完美无缺。图像的左上角位于按钮的中心点,然后图像向下并朝按钮的右下角向外移动。

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

任何想法如何使图像居中?

谢谢

4

2 回答 2

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);
于 2012-11-17T13:57:23.980 回答
1

您应该使用 JToggleButton 的setHorizontalAlignment(...)andsetVerticalAlignment(...)方法(实际上是AbstractButton)。作为参数传入SwingConstants.CENTER以使所有内容居中。

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

于 2012-11-17T13:43:57.877 回答