首页 > 解决方案 > 在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();

   }
}

这是我项目的最后一步,非常重要,感谢长期以来我搜索的帮助。

标签: javaswingjframewindow

解决方案


  1. 您的任何方法(除了 main() )都不应该是静态的。
  2. 扩展 JFrame 很少是一个好主意。
  3. 您的类 InterfaceGraphique 没有任何用处。
  4. rcourir2() 应该是 Graph 的一个实例方法。

  5. 所有这些都应该在 EventDispatchThread 上完成,而不是在主线程上。您的 main 应该创建一个 Runnable 以在 EDT 上运行,并且所有 GUI 内容都在其 run() 方法中完成。

  6. 在该运行方法中,创建一个 JFrame,创建一个图形,将图形添加到框架中,设置它的大小或打包它,并使其可见。


推荐阅读