如何在 NetBeans 中控制 JButton HTML 文本的居中?
Posted
技术标签:
【中文标题】如何在 NetBeans 中控制 JButton HTML 文本的居中?【英文标题】:How do I control the centering of JButton HTML text in NetBeans? 【发布时间】:2011-10-21 05:43:35 【问题描述】:我正在尝试在 JButton 上放置两行文本;例如
+----------+
| READER |
| STOP |
+----------+
但我无法将其置于按钮的中心。我转到 JButton 的属性编辑器,并为 text 属性输入<html><center>READER<br>STOP
。这会导致两个单词相对于彼此居中,但它们一起看起来仍然向按钮正面的右侧移动,如下所示:
+----------+
| READER|
| STOP |
+----------+
还有Horizontal & Vertical Alignment & Text Position 属性,我都设置为CENTER,但这没有任何效果,我看不到。
编辑:这是我完全省略 <center>
时的布局说明,以防有人对我的描述感到困惑,即“READER 和 STOP 是左对齐的,相互尊重,但右-在按钮上对齐”:
+----------+
| READER|
| STOP |
+----------+
编辑:这是 NetBeans 生成的代码:
readerStopButton_.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.light"));
readerStopButton_.setFont(new java.awt.Font("Geneva", 0, 12)); // NOI18N
readerStopButton_.setText("<html><center>READER<br>STOP</center></html>\n");
readerStopButton_.setToolTipText("<html><b>Stop</b> button is currently inactive. ");
readerStopButton_.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
readerStopButton_.addActionListener(new java.awt.event.ActionListener()
public void actionPerformed(java.awt.event.ActionEvent evt)
readerStopButton_ActionPerformed(evt);
);
operationButtons_.add(readerStopButton_);
编辑:这是按钮在我看来的屏幕截图。关于布局,我有很多不知道的地方,所以我很可能会遗漏一些关键信息。但基本上我让 NetBeans 完成所有工作,除了提供 HTML 文本。
编辑:放置一个显示所有按钮的替换屏幕截图。请注意,不使用 HTML 的那些(单字的)是正确对齐的,而使用 HTML 的两个是混乱的。
【问题讨论】:
【参考方案1】:原因是你限制了按钮的大小,默认情况下按钮是有边距的,你可以按如下方式去掉边距:
readerStopButton_.setMargin(new Insets(0,-30, 0,-30));
package swing;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class HTMLTextTest
public static void main(String[] args)
SwingUtilities.invokeLater(new Runnable()
public void run()
createAndShowGUI();
);
private static void createAndShowGUI()
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JPanel operationButtons_ = new JPanel();
JButton readerStopButton_ = new JButton();
readerStopButton_.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.light"));
readerStopButton_.setFont(new java.awt.Font("Geneva", 0, 12)); // NOI18N
readerStopButton_.setText("<html><center>READER<br>STOP</center></html>\n");
readerStopButton_.setToolTipText("<html><b>Stop</b> button is currently inactive. ");
readerStopButton_.setMargin(new Insets(0,-30, 0,-30));
readerStopButton_.setPreferredSize(new Dimension(66, 40));
operationButtons_.add(readerStopButton_);
readerStopButton_ = new JButton();
readerStopButton_.setBackground(javax.swing.UIManager.getDefaults().getColor("Button.light"));
readerStopButton_.setFont(new java.awt.Font("Geneva", 0, 12)); // NOI18N
readerStopButton_.setText("<html><center>READER<br>STOP</center></html>\n");
readerStopButton_.setToolTipText("<html><b>Stop</b> button is currently inactive. ");
System.out.println(readerStopButton_.getPreferredSize());
readerStopButton_.setPreferredSize(new Dimension(66, 40));
operationButtons_.add(readerStopButton_);
operationButtons_.add(new JButton("yCoder.com"));
frame.add(operationButtons_);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
【讨论】:
【参考方案2】:不要忘记结束标签:
JButton button = new JButton("<html><center>READER<br>STOP</center></html>");
另见How to Use HTML in Swing Components。
附录:我无耻地克隆了上面的@mre 的correct HTML 以生成以下图像:
【讨论】:
嗯,不,不是这样,我不认为。它确实尊重<center>
标签(我也试过关闭那个标签)——如果我省略<center>
,READER和STOP相对于彼此左对齐,但仍然在按钮上有点右对齐。 (编辑:您提到的链接确实显示居中,但不在NetBeans“表单”中,我现在高度依赖它并且不确定如何进行调整。
我已经更新了我的错误 HTML 以符合 @mre 的 answer,我会推迟。
我已经用我所看到的屏幕截图更新了问题。 FWIW,我正在使用 Lion。你的“红绿灯”看起来太大了,不像是 Lion,是吗?
嗯,这将其缩小到指定给 GUI 编辑器(或由其生成)的内容。我不确定迁移会改变这一点。顺便说一句,我认为工具提示的 HTML 中有错字。
这些按钮采用网格布局。我不小心将一个移出网格,其文本问题自行纠正。我想现在是重新审视整个肮脏的布局主题的好时机,因为我对它的无能继续让我感到痛苦。我现在不得不把这个问题放在一边,但是一旦我清楚地知道为什么(显然)网格布局会以这种方式影响文本对齐方式,我就会回到它。【参考方案3】:
我不确定你在说什么。我使用了你包含的代码,它工作得很好。
public final class HTMLTextButtonDemo
public static void main(String[] args)
SwingUtilities.invokeLater(new Runnable()
@Override
public void run()
createAndShowGUI();
);
private static void createAndShowGUI()
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
JButton readerStopButton_ = new JButton();
readerStopButton_.setFocusPainted(false);
readerStopButton_.setBackground(UIManager.getDefaults().getColor("Button.light"));
readerStopButton_.setFont(new Font("Geneva", 0, 12)); // NOI18N
readerStopButton_.setText("<html><center>READER<br>STOP</center></html>\n");
readerStopButton_.setHorizontalTextPosition(SwingConstants.CENTER);
frame.add(readerStopButton_);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
HTML 文本居中对齐。很难想象你会看到不同的东西。
【讨论】:
+1 代表sscce;作为参考,我在com.apple.laf.AquaLookAndFeel
上看到了预期的结果。
当然,我的代码嵌入到数百行 NetBeans 生成的源代码中,这很可能是问题所在。我更新了原始问题以包括我看到的按钮的屏幕截图。
天哪,你真的需要使用 HTML 来让文本居中对齐吗? Java 开发人员你错过了这么多。以上是关于如何在 NetBeans 中控制 JButton HTML 文本的居中?的主要内容,如果未能解决你的问题,请参考以下文章