【问题标题】:Center a JToggleButton ImageIcon居中 JToggleButton ImageIcon
【发布时间】:2012-11-06 00:44:57
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: java swing alignment imageicon jtogglebutton


    【解决方案1】:

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

    您可以为您的初始“未选择”图像创建一个占位符:

    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);
    

    【讨论】:

    • 谢谢。我刚发现这个!感谢您解释修复
    • @Reimeus 快速跟进 Q. 是否可以在按钮获得焦点时移除占位符图像周围的边框?
    【解决方案2】:

    您应该使用 JToggleButton 的 setHorizontalAlignment(...)setVerticalAlignment(...) 方法(实际上是 AbstractButton)。将SwingConstants.CENTER 作为参数传入以使全部居中。

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

    【讨论】:

    • 感谢您对 sscce 的建议。我没有未选择的图像,因此当它添加选择的图像时,它没有居中。如果我添加未选择的图像,那么它可以工作。必须与图像大小从未选中变为选中有关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多