在一个JOptionPane中显示所有文本而不是多个,逐行

时间:2016-04-13 04:04:33

标签: java swing text-files java.util.scanner joptionpane

(希望)快速提问,我已经写出了一些代码来显示JOptionPane中文本文​​件中的信息,它可以工作,但是它为每一行创建了一个新框。

如何让它在一个JOptionPane中显示所有读取文本,而不是逐行显示。如果可能的话,无需重写整个事情。

Scanner inFile = null; 
            try {
                inFile = new Scanner(new FileReader( curDir + "/scripts/sysinfo.txt"));
            } catch (FileNotFoundException ex) {
                Logger.getLogger(DropDownTest.class.getName()).log(Level.SEVERE, null, ex);
            }
    while(inFile.hasNextLine()){
        String line = inFile.nextLine();
JOptionPane.showMessageDialog(null, line, "System Information", JOptionPane.INFORMATION_MESSAGE); 
    }

我环顾四周寻找类似的问题,但找不到任何适合这个问题的东西,并决定只是问一下,但如果我以某种方式错过某些东西,我会道歉,这最终会成为重复。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用StringBuilder创建单个大字符串,然后像这样显示此StringBuilder:

        Scanner inFile = null; 
        StringBuilder builder = new StringBuilder();

        try {
            inFile = new Scanner(new FileReader(curDir + "/scripts/sysinfo.txt"));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(DropDownTest.class.getName()).log(Level.SEVERE, null, ex);
        }

        while(inFile.hasNextLine()){
            String line = inFile.nextLine();
            builder.append(line);
            builder.append("\n"); // add this for newlines
        }

        JOptionPane.showMessageDialog(null, builder, "System Information", JOptionPane.INFORMATION_MESSAGE); 

答案 1 :(得分:1)

创建一个String并在while循环后显示该单个String。您在while循环中显示JOptionPane,这就是为什么它显示每行的输出。

Scanner inFile = null; 
String message = null;
        try {
            inFile = new Scanner(new FileReader( curDir + "/scripts/sysinfo.txt"));
        } catch (FileNotFoundException ex) {
            Logger.getLogger(DropDownTest.class.getName()).log(Level.SEVERE, null, ex);
        }
while(inFile.hasNextLine()){
    message = message  + inFile.nextLine();
}
JOptionPane.showMessageDialog(null, message, "System Information", JOptionPane.INFORMATION_MESSAGE); 

此代码将在单个框中打印您的整个邮件,而不是多个。

答案 2 :(得分:0)

有时,我认为我们忘记了JOptionPane API的强大功能。第二个(消息)参数是Object,如果它是某种类型的组件,那么它只是添加到对话框中,例如......

JTextArea ta = new JTextArea(10, 20);
ta.setEditable(false);
try (Reader reader = new FileReader( curDir + "/scripts/sysinfo.txt")) {
    ta.read(reader, "Some stuff");
} catch (IOException exp) {
    ta.append(exp.getMessage());
    exp.printStackTrace();
}
JOptionPane.showMessageDialog(null, new JScrollPane(ta), "System Information", JOptionPane.INFORMATION_MESSAGE);

这只是使用JTextArea(和JScrollPane)来显示文件中的文字。