Java 为什么JOptionPane显示的输出与System.out.println()不同;?

Java 为什么JOptionPane显示的输出与System.out.println()不同;?,java,swing,formatting,joptionpane,Java,Swing,Formatting,Joptionpane,我试图使用System.out.println()创建一个乘法表;而且它是完美的格式;但是,当我尝试将其更改为JOptionPane函数时,结果并不令人满意。这是System.out.println();代码: public class Problem { public static void main(String[]args){ String output = " Multiplication Table\n"; output+= " ----

我试图使用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);
    }
} 
但是改变系统.out.println(输出);到JOptionPane.showMessageDialog(null,输出); 与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

问题在于所使用的字体,默认情况下JOptionPane不会以单间距字体显示文本。通过更改JOptionPane使用的字体,您可以自己看到这一点:

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使用的字体,您可以自己看到这一点:

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使用的字体不是monospacedIt的全部字体。JOptionPane使用的字体不是monospacedGood day。谢谢你的回答。我在《Java编程入门》一书中遇到了这个问题,最初的任务是使用JOptionPane。我尝试了任何方法,但都没有得到正确的结果。然而,书中的图像来自JOptionPane面板!更重要的是,数字完全一致。我没有关于该解决方案的答案,因此我来到这里……但我仍然认为,根据书中的图片,一定有smth与对齐有关。@vm\u 1\r:请参见对上述答案的编辑。这些差异可能是由于Java在该平台上使用的外观和感觉的默认版本造成的。谢谢!对我来说,这似乎不再是编程入门:)祝你好运。谢谢你的回答。我在《Java编程入门》一书中遇到了这个问题,最初的任务是使用JOptionPane。我尝试了任何方法,但都没有得到正确的结果。然而,书中的图像来自JOptionPane面板!更重要的是,数字完全一致。我没有关于该解决方案的答案,因此我来到这里……但我仍然认为,根据书中的图片,一定有smth与对齐有关。@vm\u 1\r:请参见对上述答案的编辑。这些差异可能是由于Java在该平台上使用的外观和感觉的默认版本造成的。谢谢!对我来说,这似乎不再是编程入门:)
UIManager.put("OptionPane.messageFont", new Font(Font.MONOSPACED, Font.PLAIN, 12));
JOptionPane.showMessageDialog(null, output); // non-monospaced font