【问题标题】:Displaying all text in one JOptionPane instead of multiple, line by line在一个 JOptionPane 而不是多个中逐行显示所有文本
【发布时间】:2016-04-13 04:04:33
【问题描述】:

(希望)快速提问,我已经编写了一些代码来显示 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); 
    }

我四处寻找类似的问题,但找不到任何适合此问题的问题,因此决定问一下,但如果我以某种方式遗漏了某些内容并最终导致重复,我会道歉。

感谢您的帮助。

【问题讨论】:

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


    【解决方案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); 
    

    【讨论】:

    • 不幸的是,它所做的只是让它在新框中不断地在上一行中添加下一行,直到到达文件末尾。
    • 从头开始,我放错了一个括号,修复它后,所有文本都显示了。然而,它仍然不是我的目标,我试图让它在文件中显示,每一行都在下一行,而不是一个长行。
    • 在每个循环中添加一个换行符,我会在上面贴出来
    • 上次查看JLabelJOptionPane使用的)不支持\n
    • 我刚才在 JOptionPane 上试了一下,效果很好。 StringBuilder 的 append 方法似乎可以处理它。
    【解决方案2】:

    创建一个字符串并在 while 循环后显示该单个字符串。您在 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); 
    

    此代码将在单个而不是多个框中打印您的整个消息。

    【讨论】:

    • 这不是让它变成很长的一行文字吗?
    • @MadProgrammer 是的,但这取决于程序的需要和文件中的文本量。你的回答可以解决。
    【解决方案3】:

    有时,我想我们忘记了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)来显示文件中的文本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多