[英]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.