java - 在java窗口中显示文件
问题描述
嗨,我想在带有 JFrame 的窗口中显示文件名,但它不起作用,我不知道如何在 arrayList 中为我不知道的每个文件添加一个新元素......
有课:
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
public class InterfaceGraphique extends JFrame {
private static final long serialVersionUID = 1L;
public InterfaceGraphique() {
this.setTitle("My first Window");
this.setSize(800,1000);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// First Graph Object
Graph graph = new Graph();
String Path = "./TEST";
try {
parcourir2(Path);
} catch (IOException e) {
e.printStackTrace();
}
this.setContentPane(graph);
this.setVisible(true);
}
public static void parcourir2 (String Path) throws IOException {
String[] Name = {"Point1", "Point2", "Point3","Point4","Point5","Point6","Point7","Point8","Point9","Point10"};
Graph graph = new Graph();
File repertoire = new File(Path);
File[] liste = repertoire.listFiles();
int y = 150;
if (liste != null) {
for (int i = 0; i < liste.length; i++) {
if (liste[i].isDirectory()) {
parcourir2(liste[i].getAbsolutePath());
}
if(liste[i].isFile()) {
Point Name[i] = new Point(liste[i].getName(),150,y,"normal");
graph.addPoint(Nom[i]);
System.out.println(liste[i] + "\n");
Test.TestFile.Afficher(liste[i]);
}
y+=50 ;
}
} else {
System.err.println( "Nom de repertoire invalide");
}
}
}
并且有类图:
import java.awt.Graphics;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;
public class Graph extends JPanel {
private static final long serialVersionUID = 1L;
List<Point> points = new ArrayList<Point>();
@Override
public void paintComponent(Graphics g){
System.out.println("Je suis exécutée !");
for (Point point : points) {
if(point.getEtat().contentEquals("erreur")) {
Font font = new Font("Courier", Font.BOLD, 20);
g.setFont(font);
g.setColor(Color.red);
} else if(point.getEtat().contentEquals("normal")) {
Font font = new Font("Courier", Font.BOLD, 20);
g.setFont(font);
g.setColor(Color.black);
}else if(point.getEtat().contentEquals("valide")) {
Font font = new Font("Courier", Font.BOLD, 20);
g.setFont(font);
g.setColor(Color.green);
}
g.drawString(point.getFichier(), point.getX(), point.getX());
}
}
public void addPoint(Point point) {
points.add(point);
}
public static void main(String[] args){
@SuppressWarnings("unused")
InterfaceGraphique ig = new InterfaceGraphique();
}
}
这是我项目的最后一步,非常重要,感谢长期以来我搜索的帮助。
解决方案
- 您的任何方法(除了 main() )都不应该是静态的。
- 扩展 JFrame 很少是一个好主意。
- 您的类 InterfaceGraphique 没有任何用处。
rcourir2() 应该是 Graph 的一个实例方法。
所有这些都应该在 EventDispatchThread 上完成,而不是在主线程上。您的 main 应该创建一个 Runnable 以在 EDT 上运行,并且所有 GUI 内容都在其 run() 方法中完成。
在该运行方法中,创建一个 JFrame,创建一个图形,将图形添加到框架中,设置它的大小或打包它,并使其可见。
推荐阅读
- git - 如果提交日期早于当前日期,拉取请求是否会自动合并到 GitHub/odoo.sh 中?
- gradle - 进程 'command 'npm'' 以非零退出值 254 结束
- asp.net - 如何使用 web apis 根据名称从多个连接字符串中选择数据库?
- node.js - 无法在 React 中通过 axios 下载 xlsx
- python - Python中的反向三角形
- sqlalchemy - SQLAlchmemy — 用反射表获取相关对象
- xamarin - 在两个布局之间交换子级
- android - 更新 recyclerview 适配器中的一项
- c# - SSIS - 无法加载 DLL 'clrcompression.dll':找不到指定的模块
- amazon-web-services - 如何使用 Cognito 保护对 API Gateway 的访问并使其只能通过 CloudFront 访问?