为什么我的JTextArea附加不起作用

时间:2017-05-18 13:24:53

标签: java swing

今天,我想通过制作列出目录中所有文件的东西来获取java(这样我就可以很容易地看到我在数字卡片集中遗漏了哪些卡片。) 我让文件walker工作,但是,它没有将文件名附加到我制作的JTextArea。

我有这段代码:

package finlaydag33k.swing.gui;

import java.awt.EventQueue;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

import net.miginfocom.swing.MigLayout;

public class Gui extends JFrame {

    private JPanel contentPane;
    static JTextArea filePanel = new JTextArea();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Gui frame = new Gui();
                    frame.setVisible(true);
                    try(Stream<Path> paths = Files.walk(Paths.get("/home/finlay/Pictures"))) {
                        paths.forEach(filePath -> {
                            if (Files.isRegularFile(filePath)) {
                                //System.out.println(filePath);
                            filePanel.append("Hii");
                            }
                        });
                    }
                    System.out.println(System.currentTimeMillis() - System.currentTimeMillis());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Gui() {
        setAlwaysOnTop(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new MigLayout("", "[][grow]", "[][grow]"));

        JTextArea filePanel =  new JTextArea();
        contentPane.add(filePanel, "cell 1 1,grow");
    }

}

line 34上,问题似乎发生了(我只是将hii添加为占位符,以便我找出问题)。
我没有收到任何错误(只有一些警告说 The serializable class Gui does not declare a static final serialVersionUID field of type long,但这不应该导致它吗?)。
GUI只是加载textArea为空。 我希望有人能帮助我:)

请原谅我在阅读代码时可能会遇到的任何畏缩:) 干杯!

1 个答案:

答案 0 :(得分:3)

您有两个名称相同但范围不同的实例:

public class Gui extends JFrame {

    static JTextArea filePanel = new JTextArea();

在构造函数中:

public Gui() {
    ...
    JTextArea filePanel =  new JTextArea();

这意味着您要将构造函数中声明的那个添加到框架中,但是在主框架中附加静态框架。根本不是同一个实例。

删除静态(因为这没有意义)

public class Gui extends JFrame {

     JTextArea filePanel;

删除第二个声明,以在构造函数

中初始化变量
public Gui() {
        ...
        filePanel =  new JTextArea();

并使用main中的变量实例来访问它

frane.filePanel.append("Hii");

有关更多说明,请在Java中搜索阴影字段。这就是你在做什么。您可以通过在不同范围内声明相同的变量来隐藏变量。