gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:54:25 25 4
gpt4 key购买 nike

今天,我想学习 java,通过制作一些东西来列出目录中的所有文件(这样我就可以很容易地看到我在数字卡片 Collection 中遗漏了哪些卡片)。
我让 file 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");
}

}

第 34 行 上,问题似乎发生了(我只是将 hii 添加为占位符,以便找出问题所在)。
我没有收到任何错误(只有一些警告说
可序列化类 Gui 没有声明 long 类型的静态最终 serialVersionUID 字段
,但这不应该导致它,对吗?)。
GUI 加载时 textArea 为空。我希望有人能够帮助我 :)

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

最佳答案

你有两个同名但作用域不同的实例:

public class Gui extends JFrame {

static JTextArea filePanel = new JTextArea();

在构造函数中:

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

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

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

public class Gui extends JFrame {

JTextArea filePanel;

删除第二个声明,在构造函数中初始化变量

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

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

frane.filePanel.append("Hii");

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

关于java - 为什么我的 JTextArea 附加不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44049039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com