如何通过“:”对齐多行JOptionPane输出对话框消息?
How to align multiple lines of JOptionPane output dialog messages by ":"?
我需要使用 JOptionPane.showdialogmessage() 将输出分为 3 行并按“:”对齐:
*注意“:”的对齐方式
Total cost : 175.00
Number of units : 500
Cost per unit : .35
我已经尝试在每个“:”之前手动添加空格,但是这 3 行仍然没有严格对齐:
String output = String.format("Total manufacturing cost :$%.2f\n", manufactCost) +
String.format("Number of units manufactured : $%d\n", numManufacted) +
String.format("Cost per unit : $%.2f\n", unitCost);
JOptionPane.showMessageDialog(null, output);
这是输出截图:
实现这种对齐最简单的方法是什么?
谢谢
P.S.: 这是我的第一个post。抱歉,我仍然在为如何以向您显示输出的正确格式的方式编辑 post 而苦苦挣扎......我已经被格式化逼疯了......所以我只是 post屏幕截图代替...大声笑
如果您将标签文本设置为以 "<html>"
开头,那么该文本将被解释为非常基本的早期 HTML。因此,您可以插入 table 或其他对齐方式。
如果可以接受等宽字体:
- 使用
"monospaced"
Font
(默认字体不是等宽的,所以几乎不可能对齐)
- 使用
String.format
根据需要格式化字符串
备选方案(我的首选,但不是最简单的方法):
使用 JPanel
作为 JOptionPane
的 message,在那里你可以使用像 GridBagLayout
(或 GridLayout
这样的布局管理器,易于使用).
Tom 的回答,使用 HTML,也很容易使用(可能是最简单的解决方案)
避免使用等宽字体或奇怪的技巧。
构造一个使用 GridBagLayout
的 JPanel
,并记住 showMessageDialog
接受其他 Component
,而不仅仅是文本。
相关代码。我为 :
选择了一个单独的标签,这样您就可以根据自己的喜好自定义它,同时仍然保持对齐。
final JPanel panel = new JPanel(new GridBagLayout());
final GridBagConstraints gc = new GridBagConstraints();
final Insets descriptionInsets = new Insets(3, 5, 3, 15);
final Insets valuesInsets = new Insets(3, 2, 3, 2);
gc.fill = GridBagConstraints.HORIZONTAL;
gc.anchor = GridBagConstraints.NORTH;
gc.insets = descriptionInsets;
gc.weightx = 1.0;
panel.add(new JLabel("Total cost"), gc);
gc.insets = valuesInsets;
gc.weightx = 0;
gc.gridx = 1;
panel.add(new JLabel(":"), gc);
gc.gridx = 2;
panel.add(new JLabel("175.00"), gc);
gc.insets = descriptionInsets;
gc.weightx = 1.0;
gc.gridx = 0;
gc.gridy = 1;
panel.add(new JLabel("Number of units"), gc);
gc.insets = valuesInsets;
gc.weightx = 0;
gc.gridx = 1;
panel.add(new JLabel(":"), gc);
gc.gridx = 2;
panel.add(new JLabel("500"), gc);
gc.insets = descriptionInsets;
gc.weightx = 1.0;
gc.gridx = 0;
gc.gridy = 2;
panel.add(new JLabel("Cost per unit"), gc);
gc.insets = new Insets(3, 2, 3, 2);
gc.weightx = 0;
gc.gridx = 1;
panel.add(new JLabel(":"), gc);
gc.gridx = 2;
panel.add(new JLabel(".35"), gc);
JOptionPane.showMessageDialog(frame, panel);
我需要使用 JOptionPane.showdialogmessage() 将输出分为 3 行并按“:”对齐: *注意“:”的对齐方式
Total cost : 175.00
Number of units : 500
Cost per unit : .35
我已经尝试在每个“:”之前手动添加空格,但是这 3 行仍然没有严格对齐:
String output = String.format("Total manufacturing cost :$%.2f\n", manufactCost) +
String.format("Number of units manufactured : $%d\n", numManufacted) +
String.format("Cost per unit : $%.2f\n", unitCost);
JOptionPane.showMessageDialog(null, output);
这是输出截图:
实现这种对齐最简单的方法是什么? 谢谢
P.S.: 这是我的第一个post。抱歉,我仍然在为如何以向您显示输出的正确格式的方式编辑 post 而苦苦挣扎......我已经被格式化逼疯了......所以我只是 post屏幕截图代替...大声笑
如果您将标签文本设置为以 "<html>"
开头,那么该文本将被解释为非常基本的早期 HTML。因此,您可以插入 table 或其他对齐方式。
如果可以接受等宽字体:
- 使用
"monospaced"
Font
(默认字体不是等宽的,所以几乎不可能对齐) - 使用
String.format
根据需要格式化字符串
备选方案(我的首选,但不是最简单的方法):
使用 JPanel
作为 JOptionPane
的 message,在那里你可以使用像 GridBagLayout
(或 GridLayout
这样的布局管理器,易于使用).
Tom 的回答,使用 HTML,也很容易使用(可能是最简单的解决方案)
避免使用等宽字体或奇怪的技巧。
构造一个使用 GridBagLayout
的 JPanel
,并记住 showMessageDialog
接受其他 Component
,而不仅仅是文本。
相关代码。我为 :
选择了一个单独的标签,这样您就可以根据自己的喜好自定义它,同时仍然保持对齐。
final JPanel panel = new JPanel(new GridBagLayout());
final GridBagConstraints gc = new GridBagConstraints();
final Insets descriptionInsets = new Insets(3, 5, 3, 15);
final Insets valuesInsets = new Insets(3, 2, 3, 2);
gc.fill = GridBagConstraints.HORIZONTAL;
gc.anchor = GridBagConstraints.NORTH;
gc.insets = descriptionInsets;
gc.weightx = 1.0;
panel.add(new JLabel("Total cost"), gc);
gc.insets = valuesInsets;
gc.weightx = 0;
gc.gridx = 1;
panel.add(new JLabel(":"), gc);
gc.gridx = 2;
panel.add(new JLabel("175.00"), gc);
gc.insets = descriptionInsets;
gc.weightx = 1.0;
gc.gridx = 0;
gc.gridy = 1;
panel.add(new JLabel("Number of units"), gc);
gc.insets = valuesInsets;
gc.weightx = 0;
gc.gridx = 1;
panel.add(new JLabel(":"), gc);
gc.gridx = 2;
panel.add(new JLabel("500"), gc);
gc.insets = descriptionInsets;
gc.weightx = 1.0;
gc.gridx = 0;
gc.gridy = 2;
panel.add(new JLabel("Cost per unit"), gc);
gc.insets = new Insets(3, 2, 3, 2);
gc.weightx = 0;
gc.gridx = 1;
panel.add(new JLabel(":"), gc);
gc.gridx = 2;
panel.add(new JLabel(".35"), gc);
JOptionPane.showMessageDialog(frame, panel);