Java 如何创建按钮左边有文本,按钮右边有图标的JButton
基本上,我试图制作一个文本向左对齐的按钮(因此我使用Java 如何创建按钮左边有文本,按钮右边有图标的JButton,java,swing,icons,alignment,jbutton,Java,Swing,Icons,Alignment,Jbutton,基本上,我试图制作一个文本向左对齐的按钮(因此我使用setHorizontalAlignment(SwingConstants.left))和按钮右边框上远离文本的图像 我已经尝试了setHorizontalTextAlignment(SwingConstants.LEFT),但这只会使文本移到图标的左侧,这并不是我想要的,因为我需要将图标与之隔离 此外,我不能设置任何固定间距,因为这是一系列具有不同文本和不同大小的按钮。您可以向按钮添加布局管理器 JButton btn = new JButt
setHorizontalAlignment(SwingConstants.left))
和按钮右边框上远离文本的图像
我已经尝试了setHorizontalTextAlignment(SwingConstants.LEFT)
,但这只会使文本移到图标的左侧,这并不是我想要的,因为我需要将图标与之隔离
此外,我不能设置任何固定间距,因为这是一系列具有不同文本和不同大小的按钮。您可以向按钮添加布局管理器
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
很抱歉,在挑选一个好的布局时,我帮不了你多少忙,但这最终会让你得到你想要的。也许其他人可以对使用哪个按钮发表评论。您可以在按钮中添加布局管理器
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
很抱歉,在挑选一个好的布局时,我帮不了你多少忙,但这最终会让你得到你想要的。也许其他人可以评论使用哪一个
我不能做任何固定的间距,因为这是一系列按钮,有不同大小的不同文本
您可以使用如下代码动态更改间距:
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 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);
这是camickr答案的衍生版本,允许在GUI构建器中进行编辑并将其放置在动态布局中。我还删除了
UIManager.getInt(“Button.iconTextGap”)
,因此如果需要,间隙将缩小到0
我将其称为“对齐”按钮,类似于对齐文本对齐(通过增加空格字符的宽度向左和向右拉伸段落)
这还没有完全准备好生产,需要一些现场测试。如果我找到什么,我会编辑代码
[编辑]现在适用于垂直文本对齐。也简化了一点。[edit2]还可以操纵
getPreferredSize
以更好地使用滚动窗格(否则滚动窗格会不断增长,不再收缩)这是camickr答案的衍生版本,允许在GUI生成器中进行编辑,并将其放置在动态布局中。我还删除了UIManager.getInt(“Button.iconTextGap”)
,因此如果需要,间隙将缩小到0
我将其称为“对齐”按钮,类似于对齐文本对齐(通过增加空格字符的宽度向左和向右拉伸段落)
这还没有完全准备好生产,需要一些现场测试。如果我找到什么,我会编辑代码
[编辑]现在适用于垂直文本对齐。也简化了一点。[edit2]还可以操纵
getPreferredSize
以更好地使用滚动窗格(否则滚动窗格将继续增长,不再收缩)我打算提出这个建议,但“焦点指示器”不会在添加到按钮的组件周围绘制。我打算提出这个建议,但是“焦点指示器”不会在添加到按钮的组件周围绘制。请充分使用getIconTextGap()
。对于那些想知道的人来说,它返回文本与此按钮中显示的图标之间的空间量。
不幸的是,当按钮在GUI生成器生成的代码中实例化时,它不能使用此值。解决方法是将按钮子类化,并将其添加到GUI builder调色板中,这就是我所做的。我发现使用Java 11和分数显示比例(如125%),我必须从gap
中减去一个2像素的模糊因子,否则随着一些布局的调整,偶尔会出现一个省略号。更新:@MarkJeronimus的回答似乎避免了这一点(并避免了文本位置的“抖动”)。很好地使用了getIconTextGap()
。对于那些想知道的人来说,它返回文本与此按钮中显示的图标之间的空间量。
不幸的是,当按钮在GUI生成器生成的代码中实例化时,它不能使用此值。解决方法是将按钮子类化,并将其添加到GUI builder调色板中,这就是我所做的。我发现使用Java 11和分数显示比例(如125%),我必须从gap
中减去一个2像素的模糊因子,否则随着一些布局的调整,偶尔会出现一个省略号。更新:@MarkJeronimus的回答似乎避免了这一点(并避免了文本位置的“抖动”)