我试图使用System.out.println()创建一个乘法表;并且格式完美;但是,当我尝试将其更改为JOptionPane函数时,结果并不理想。这是System.out.println();代码:
public class Problem {
public static void main(String[]args){
String output = " Multiplication Table\n";
output+= " ------------------------------------\n";
output+=" | ";
for(int j = 1;j<=9;j++)
output+= j +" ";
output+= "\n";
for(int i = 1 ; i<=9;i++){
output+= i + "|";
for(int j = 1;j<=9;j++){
output+=String.format("%4d", i * j);
}
output+="\n";
}
System.out.println(output);
}
}
以下是输出:
Multiplication Table
------------------------------------
| 1 2 3 4 5 6 7 8 9
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
但是将 System.out.println(output); 更改为 JOptionPane.showMessageDialog(null,output); 与System.out.println()相比,给出混乱的格式,没有很好地对齐我不知道如何从JOptionPane复制输出,但是看起来像这样:
1| 1 2 3 4 5 6 7 8 9
2| 2 4 6 8 10 12 14 16 18
3| 3 6 9 12 15 18 21 24 27
4| 4 8 12 16 20 24 28 32 36
5| 5 10 15 20 25 30 35 40 45
6| 6 12 18 24 30 36 42 48 54
7| 7 14 21 28 35 42 49 56 63
8| 8 16 24 32 40 48 56 64 72
9| 9 18 27 36 45 54 63 72 81
答案 0 :(得分:2)
问题全在于所使用的字体,默认情况下,JOptionPane不会以等间距的字体显示文本。您可以通过更改用于JOptionPane的Font来自己查看:
import javax.swing.*;
import java.awt.*;
public class Problem {
public static void main(String[]args){
String output = " Multiplication Table\n";
output+= " ------------------------------------\n";
output+=" | ";
for(int j = 1;j<=9;j++)
output+= j +" ";
output+= "\n";
for(int i = 1 ; i<=9;i++){
output+= i + "|";
for(int j = 1;j<=9;j++){
output+=String.format("%4d", i * j);
}
output+="\n";
}
System.out.println(output);
JOptionPane.showMessageDialog(null, output); // non-monospaced font
JTextArea textArea = new JTextArea(output);
textArea.setFocusable(false);
textArea.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
textArea.setBorder(null);
textArea.setBackground(null);
JOptionPane.showMessageDialog(null, textArea); // displaying a monospaced font
}
}
这将第二个JOptionPane显示为:
请注意,JOptionPane的字体将由程序使用的外观来指定。通过使用UIManager更改JOptionPane使用的默认消息Font,可以告诉L&F使用特定的Font。例如,如果您在下面进行调用,则JOptionPane使用的JLabel(此处的JOptionPane使用GridLayout创建在JPanel中显示的JLabel的几行)为所需的字体:
UIManager.put("OptionPane.messageFont", new Font(Font.MONOSPACED, Font.PLAIN, 12));
JOptionPane.showMessageDialog(null, output); // non-monospaced font