簡體   English   中英

如何創建一個JButton,其左側的按鈕上帶有文本,而圖標在右側的按鈕上與其分開

[英]How to create a JButton with text on the button left and the icon separated from it on the button right

基本上,我試圖制作一個按鈕,其文本向左對齊(因此我正在使用setHorizontalAlignment(SwingConstants.LEFT)) ,圖像位於按鈕的右邊框,遠離文本。

我已經嘗試過setHorizontalTextAlignment(SwingConstants.LEFT) ,但這只是使文本相對於圖標的左側變得相對,這並不是我想要的,因為我需要將圖標從中分離出來。

另外,我不能設置任何固定間距,因為它是一系列帶有不同大小的不同文本的按鈕。

我不能設置任何固定的間距,因為它是一系列帶有不同大小的不同文本的按鈕。

您可以使用以下代碼動態更改間距:

JButton button = new JButton("Text on left:")
{
    @Override
    public void doLayout()
    {
        super.doLayout();

        int preferredWidth = getPreferredSize().width;
        int actualWidth = getSize().width;

        if (actualWidth != preferredWidth)
        {
            int gap = getIconTextGap() + actualWidth - preferredWidth;
            gap = Math.max(gap, UIManager.getInt("Button.iconTextGap"));
            setIconTextGap(gap);
        }
    }
};
button.setIcon( new ImageIcon("copy16.gif") );
button.setHorizontalTextPosition(SwingConstants.LEADING);

您可以將布局管理器添加到您的按鈕。

JButton btn = new JButton();
btn.add(new JLabel(text));
btn.add(new JLabel(img));
btn.setLayout(/*best layout choice here*/);
btn.setPreferredSize(new Dimension(x,y));
btn.setMaximumSize(new Dimension(maxX, minY));
btn.setMinimumSize(new Dimension(minX, minY)); //this one is most important when it comes to layoutmanagers

抱歉,在選擇良好的布局時我幫不上忙-但這最終會為您提供所需的東西。 也許其他人可以評論要使用哪個。

這是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使其在滾動窗格中很好地播放(否則,它會不斷增長,並且再也不會縮小)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM