2017-02-01 1 views
-1

Ich versuche, einen Application Launcher für mein Klassenprojekt zu erstellen.Erstellen Sie eine neue Instanz von JLabel und actionlistener in der Schleife

Ich versuche, eine Funktion zu implementieren, die jede Zeile aus einer Textdatei nehmen und es zu einem JLabel setzen und ein ActionListener jedes Mal hinzufügen, wenn die Schleife ausgeführt wird. Am Ende der Schleife zeigte es alle JLabels, aber wann immer ich auf irgendeinen klickte, würde es öffnen, was auch immer Programm in einer Datei zuletzt war.

Meine Frage ist, wie kann ich es machen, wo ich auf einen Programmnamen klicken und die richtige Datei öffnen kann?

Hier ist der Code, den ich habe:

public static void list() 
{ 
    String file = "files/programList.txt"; 

    //final Scanner read = new Scanner(file); 
    String filePath; 
    String content; 
    String line = ""; 
    content = "<html>"; 
    int count = 0, i = 0, y = 0; 
    int x = 0; 
    lines = 0; 
    try 
    { 
     FileReader read = new FileReader(file); 
     LineNumberReader lRead = new LineNumberReader(
          new FileReader(new File("files/programList.txt"))); 
     lRead.skip(Long.MAX_VALUE); 
     BufferedReader bRead = new BufferedReader(read); 
     int numbOfLines = lRead.getLineNumber() + 1; 
     System.out.println(numbOfLines); 
     fixedLine = new ArrayList<String>(lRead.getLineNumber()); 
     while((line = bRead.readLine()) != null) 
     { 
      int index = -1; 

      if(lines != numbOfLines) 
      { 
       if(lines == 0) 
       { 
        fixedLine.add(line); 
        lines = 1; 
       } 
       else 
       { 
        fixedLine.set(lines++, line); 
        //fixedLine = line; 
        //pLine = new JLabel(fixedLine); 
        //pLine.setFont(new Font("Verdana", 1, 20)); 
        //pLine.setForeground(Color.WHITE); 
        //pLine.addMouseListener(new MouseAdapter() 
        //{ 
        // public void mouseClicked(MouseEvent e) 
        //{ 
        // fileList.run(pLine.getText()); 
        // System.out.println(pLine.getText()); 
        //} 
        //}); 
        //panel.add(pLine); 
        //frame.repaint(); 
        //frame.revalidate(); 
        content = content + line + "<br>"; 
        System.out.println(lines); 

        System.out.println(fixedLine); 
       } 
      } 
      else 
      { 
       lines++; 
      } 
     } 
     bRead.close(); 
     lRead.close(); 
     content = content + "</html>"; 
     System.out.println(fixedLine.get(0)); 

     System.out.println(numbOfLines);//maybe use array or arraylist 
    } 
    catch(IOException e) 
    { 
     System.err.println(e.getMessage()); 
    } 

} 

ich mit einem String Arraylist experimentierte und bekam es nur ein Programm hinzufügen, bevor es mir einen Fehler gibt.

Was kann ich tun, damit es funktioniert?

Nachdem ich das Programm bekommen arbeiten werde ich meinen Code vereinfachen und zu verbessern, wie ich meine Codierung wissen, ist nicht die beste

+1

', bevor es gibt mir eine error' definiert sind, wenn Sie wollen, dass Leute mit dem Fehler helfen, den Sie bekommen, zeigen Sie ihnen den Fehler, den Sie erhalten – SomeJavaGuy

+0

nicht wirklich verstehen, was Sie versuchen, aber ersetzen Sie zuerst die fixedLine.set (..) mit fixedLine.add (..) um eine ArrayIndexOutOfBoundsException zu vermeiden – clic

+0

@clic Ich habe das schon mal probiert und es würde immer nur die letzte Zeile der Textdatei in das Array geschrieben. Ich habe versucht, die fixedLine.add() vor der While-Schleife, so dass es etwas in das Array während der Schleife, und wie im Code gesehen, versuchte eine if-Anweisung. Ich habe nicht mit vielen Arrays vor – feare56

Antwort

0

Sie wollen also etwas auszuführen, wenn Sie ein JLabel, aus einer Datei lesen etwas klicken. Ich denke, du machst seltsame Dinge, um die Zeilen zu lesen. Warum so viele Listen? Man könnte so etwas wie

Files.lines(Paths.get("files", "programList.txt")).forEach(
      f -> { 
       JLabel label = new JLabel(f); 
       label.addMouseListener(new MouseAdapter() { 
        public void mouseClicked(MouseEvent e) { 
         executeopeningMagicWithTheFile(f); 
        } 
       }); 
       panel.add(label); 
      } 
    ); 

ich hoffe, das hilft, es ist ziemlich unklar, was genau Sie wollen, da Ihr Code Code in Kommentar enthält und Variablen, die nicht

+0

gearbeitet Würde dies alles in der try-Anweisung ersetzen? Entschuldigung wegen all der Kommentare, ich war mitten in der Implementierung der ArrayList und habe den ganzen Code auskommentiert, von dem ich wusste, dass er teilweise funktioniert hat, sodass ich bei Bedarf auf die alte Art zurückgehen kann. – feare56

+0

Ja, das würde das ersetzen. – Redlab

Verwandte Themen