为什么我的JTextArea无法从while循环中正确显示?

时间:2014-08-28 16:04:13

标签: java swing while-loop jtextfield jtextarea

我的GUI应用程序允许用户输入JTextField对象,说明要打开的文件的名称,并将其内容显示在JTextArea对象上。如果输入的信息由文件名组成,则应检索其内容,否则,它应为目录,然后显示文件和文件夹。现在,我在我的setText()的{​​{1}}中卡住了,但是没有正确显示内容。它只显示一次,这意味着我的JTextArea循环存在一些问题。你能帮帮我吗?

请注意,以下代码已更改为正确的工作版本,前提是所有有用的贡献者。

主要课程:

while

驱动程序类:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;

class MyFileLister extends JPanel implements ActionListener {

private JLabel prompt = null;

private JTextField userInput = null;

private JTextArea textArea = null;

public MyFileLister()
{
    prompt = new JLabel("Enter filename: ");
    prompt.setOpaque(true);
    this.add(prompt);

    userInput = new JTextField(28);
    userInput.addActionListener(this);
    this.add(userInput);

    textArea = new JTextArea(10, 30);
    textArea.setOpaque(true);
    JScrollPane scrollpane = new JScrollPane(textArea);
    this.add(textArea, BorderLayout.SOUTH);
}

Scanner s = null;
File af = null;
String[] paths;

public void actionPerformed(ActionEvent f)
{
    try
    {
        s = new Scanner(new File(userInput.getText()));

        while(s.hasNextLine())
        {
            String as = s.nextLine();
            textArea.append(as + "\n");
            textArea.setLineWrap(truea);
        }

    }
    catch(FileNotFoundException e)
    {
        af = new File(userInput.getText());

        paths = af.list();
        System.out.println(Arrays.toString(paths));

        String tempPath = "";
        for(String path: paths)
        {
            tempPath += path + "\n";
        }

        textArea.setText(tempPath);
    }
}
}

这是我必须实现的屏幕截图之一。它显示当用户的输入位于目录上时,它会显示其下的文件和文件夹列表。

screenshot_directory

我试图输入一个if语句,看看我是否可以插入一个显示消息对话框,但我真的不知道该放在哪里。

import java.util.*;
import java.awt.*;
import javax.swing.*;


class TestMyFileLister {

public static void main(String [] args)
{
    MyFileLister thePanel = new MyFileLister();

    JFrame firstFrame = new JFrame("My File Lister");

    firstFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    firstFrame.setVisible(true);
    firstFrame.setSize(500, 500);
    firstFrame.add(thePanel);


}
}

2 个答案:

答案 0 :(得分:2)

代码:

public void actionPerformed(ActionEvent ae) {
        try (Scanner s = new Scanner(new File(userInput.getText()))) {
            while (s.hasNextLine()) {
                String as = s.nextLine();
                textArea.append(as + "\n");
                textArea.setLineWrap(true);

            }

        } catch (FileNotFoundException e) {
            JOptionPane.showMessageDialog(this,
                    "File not found",
                    "No File Error",
                    JOptionPane.ERROR_MESSAGE);
        }
    }

备注:

  1. 只是尝试逐行读取您的文件,这样您就可以将相同的结构从文件中复制到JTextArea中。
  2. 使用setLineWrap方法并将其设置为true  在这里阅读http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html#setLineWrap(boolean)

  3. 使用append方法将文本添加到JTextArea的末尾 在这里阅读 http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextArea.html#append(java.lang.String)

  4. 使用JOptionPane向用户显示错误消息

答案 1 :(得分:2)

您已根据列表中的textAreaLast File输出文字! (不要直接在循环中将文本设置为JTextArea,循环很快,UI无法渲染它,因此连接字符串然后在循环结束后设置它。)< / p>

     // These lines below are causing only last file shown.

    for(String path: paths)
    {
        textArea.setText(path);
    }

以下是MyFileLister类的修改版本:

public class MyFileLister extends JPanel implements ActionListener {

private JLabel prompt = null;  
private JTextField userInput = null;    
private JTextArea textArea = null;

public MyFileLister()
{
    prompt = new JLabel("Enter filename: ");
    prompt.setOpaque(true);
    this.add(prompt);

    userInput = new JTextField(28);
    userInput.addActionListener(this);
    this.add(userInput);

    textArea = new JTextArea(10, 30);
    textArea.setOpaque(true);
    JScrollPane scrollpane = new JScrollPane(textArea);
    this.add(scrollpane, BorderLayout.SOUTH);
}

Scanner s = null;
File af ;
String[] paths;

public void actionPerformed(ActionEvent f)
{
    try
    {
        s = new Scanner(new File(userInput.getText()));

        while(s.hasNext())
        {
            String as = s.next();
            textArea.setText(as);
        }

    }
    catch(FileNotFoundException e)
    {
        af = new File(userInput.getText());

        paths = af.list();
       System.out.println(Arrays.toString(paths));

       String tempPath=""; 
        for(String path: paths)
        {
           tempPath+=path+"\n";

        }
        textArea.setText(tempPath);

    }
}
}

输出:

enter image description here