2017-02-01 15 views
-1

私のクラスプロジェクトのアプリケーションランチャーを作成しようとしています。ループ内にJLabelとactionListenerの新しいインスタンスを作成します

私は、テキストファイルから各行を取り出してJLabelに置き、ループが実行されるたびにActionListenerを追加する関数を実装しようとしています。ループの最後にはJLabelsがすべて表示されていましたが、クリックするたびにファイル内の最後のプログラムが開きます。

私の質問は、プログラム名をクリックして正しいファイルを開くことができます。私は、文字列のArrayListを使って実験し、唯一のそれは私にエラーを与える前に、一つのプログラムを追加するためにそれを得た

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()); 
    } 

} 

ここで私がやったコードです。

私はそれを動作させるために何ができますか?私は私のコーディングだからあなたはJLabelの、ファイルから読み込ん何かをクリックしたときに何かを実行したい最高の

+1

'それは私にERROR'を与える前に、もし人々は、あなたが得ているエラーを手助けしてくれるように、 – SomeJavaGuy

+0

が実際に何をしようとしているのか理解していないが、最初にfixedLine.set(..)をfixedLine.add(.. )ArrayIndexOutOfBoundsExceptionを避けるために – clic

+0

@ cyclic私はこれを試してみました。そして、それは常にテキストファイルの最後の行を配列に置きます。 whileループの前にfixedLine.add()を入れて、ループ中に配列内に何かがあるようにしてみました。コードに見られるように、if文を試しました。以前は多くの配列で作業していませんでした – feare56

答えて

0

ではありません知っているように私は私のコードを簡素化し、それを改善します作業プログラムを入手した後

。私はあなたが行を読むために奇妙なことをすると思います。なぜそんなに多くのリスト?あなたはあなたのコードが定義されていないコメントや変数のコードが含まれているので、それは正確に何をしたいという不明確だ、私はこのことができます願ってい

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); 
      } 
    ); 

ような何かを行うことができ

+0

これはtry文のすべてを置き換えますか?申し訳ありませんが、私はArrayListを実装する途中で、部分的に動作していることを知っていたコードをすべてコメントアウトしましたので、必要に応じて古い方法に戻ることができます。 – feare56

+0

はい、それはそれを置き換えるでしょう。 – Redlab

関連する問題