为什么我的 html 代码在 Swing 的 JButton 中偏离了中心?
Why is my html code in Swing's JButton off center?
我的 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
是否更简单,但我真的不知道你想要实现什么...
我的 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
是否更简单,但我真的不知道你想要实现什么...