如何在左侧按钮上创建一个带有文本的JButton,并在右侧按钮上将图标与其分开

时间:2015-12-20 01:28:49

标签: java swing icons alignment jbutton

基本上,我尝试制作一个文本左侧对齐的按钮(所以我使用setHorizontalAlignment(SwingConstants.LEFT))和按钮右边框上的图像,远离文字。

我已经尝试了setHorizontalTextAlignment(SwingConstants.LEFT),但这只是让文字与图标的左侧相关,这不是我想要的,因为我需要将图标与其隔离。

另外,我不能制作任何固定的间距,因为它是一系列具有不同尺寸的不同文本的按钮。

1 个答案:

答案 0 :(得分:0)

这是camickr的答案的衍生物,允许在GUI构建器中进行编辑以及将其置于动态布局中。我还删除了UIManager.getInt("Button.iconTextGap"),以便在必要时缩小到0。

我把它称为'对齐'按钮,类似于对齐的文本对齐方式(通过增加空格字符的宽度,将段落向左和向右拉伸)。

public class JustifiedButton extends JButton {
    @Override
    public void doLayout() {
        super.doLayout();

        setIconTextGap(0);
        if (getHorizontalTextPosition() != CENTER) {
            int newGap = getSize().width - getMinimumSize().width;
            if (newGap > 0)
                setIconTextGap(newGap);
        }
    }

    @Override
    public Dimension getMinimumSize() {
        Dimension minimumSize = super.getMinimumSize();

        if (getHorizontalTextPosition() != CENTER)
            minimumSize.width -= getIconTextGap();

        return minimumSize;
    }

    @Override
    public Dimension getPreferredSize() {
        Dimension preferredSize = super.getPreferredSize();

        if (getHorizontalTextPosition() != CENTER)
            preferredSize.width -= getIconTextGap();

        return preferredSize;
    }
}

这不完全适合生产,需要进行一些现场测试。如果我发现了什么,我会编辑代码。

[edit]现在适用于垂直文本对齐。也简化了一点 [edit2]同时操纵getPreferredSize与滚动窗格一起玩得很好(否则它会不断增长,再也不会缩小)