我正在嘗試爲我的類項目創建一個應用程序啓動器。在循環中創建JLabel和actionlistener的新實例
我想實現一個函數,它將從文本文件中取出每一行,並將其放入JLabel
,並在每次循環運行時添加一個ActionListener
。在循環結束時,它確實顯示了所有的JLabels
,但是每當我點擊任何它會打開文件中最後一個程序。
我的問題是我該如何做到我可以點擊程序名並打開正確的文件?
這裏是我做的代碼:
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());
}
}
我與一個字符串數組列表試驗和只得到它來添加一個程序它給了我一個錯誤之前。
我能做些什麼才能使它工作?
後,我得到的程序工作,我將簡化我的代碼和改進它,因爲我知道我的編碼是不是最好的
'之前它給了我一個error',如果你希望人們幫助你得到的錯誤,向他們展示你得到的錯誤 – SomeJavaGuy
並不真正瞭解你正在嘗試的,但首先用fixedLine.add(..)替換fixedLine.set(..)。 )來避免ArrayIndexOutOfBoundsException – clic
@clic我已經嘗試過,它總是會把文本文件的最後一行放在數組中。我試過在while循環之前放置fixedLine.add(),所以在循環中會有數組中的東西,並且在代碼中看到了if語句。在 – feare56