我的Swing JButton代码如下所示:
Insets An_Inset=new Insets(0,0,0,0);
String Content="<Html>"+
" <Table Border=1 Cellspacing=0 Cellpadding=2 Width=48>"+
" <Tr><Td Align=Center BgColor=Blue><Font Size=3> + </Font></Td><Td Align=Center><Font Size=3> + </Font></Td></Tr>"+
" <Tr><Td Align=Center><Font Size=3> + </Font></Td><Td Align=Center><Font Size=3> + </Font></Td></Tr>"+
" </Table>"+
"</Html>";
JButton aButton=new JButton(Content);
aButton.setFont(new Font(Monospaced,0,16));
aButton.setPreferredSize(new Dimension(56,56));
aButton.setEnabled(false);
aButton.setMargin(An_Inset);
aButton.setHorizontalAlignment(SwingConstants.CENTER);
但“+”标记偏离中心,如何修复?
最佳答案
所以主要有两件事(也许3)
去掉setPreferredSize
,让按钮根据文本的呈现方式决定文本的大小。
去掉“+”周围的空格,这些空格不允许文本的居中对齐(通过任何计算来确定)
你也可以考虑摆脱aButton.setFont(new Font("Monospaced", 0, 16));
,但这取决于你的需要。。。
所以,左边的那个没有setFont
,右边的那个有setFont
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Buttons {
public static void main(String[] args) {
new Buttons();
}
public Buttons() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
add(makeButton());
}
public JButton makeButton() {
Insets An_Inset = new Insets(0, 0, 0, 0);
String Content = "<Html>"
+ " <Table Border=1 Cellspacing=0 Cellpadding=2 Width=48>"
+ " <Tr><Td Align=Center BgColor=Blue><Font Size=3>+</Font></Td><Td Align=Center><Font Size=3>+</Font></Td></Tr>"
+ " <Tr><Td Align=Center><Font Size=3>+</Font></Td><Td Align=Center>+</Font></Td></Tr>"
+ " </Table>"
+ "</Html>";
JButton aButton = new JButton(Content);
aButton.setFont(new Font("Monospaced", 0, 16));
// aButton.setPreferredSize(new Dimension(56, 56));
aButton.setEnabled(false);
aButton.setMargin(An_Inset);
aButton.setHorizontalAlignment(SwingConstants.CENTER);
return aButton;
}
}
}
我有点想知道使用
GridLayout
是否更简单,但我真的不知道你想实现什么。。。