在循环中创建 JLabel 和 actionlistener 的新实例
Create new instance of JLabel and actionlistener in loop
我正在尝试为我的 class 项目创建一个应用程序启动器。
我正在尝试实现一个函数,该函数将从文本文件中取出每一行并将其放入 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());
}
}
我正在试验一个字符串数组列表,但在它给我一个错误之前只让它添加了一个程序。
我该怎么做才能让它正常工作?
程序运行后,我将简化并改进我的代码,因为我知道我的编码不是最好的
因此,您希望在单击 JLabel 时执行某些操作,即从文件中读取的操作。我认为您会做一些奇怪的事情来阅读台词。为什么有这么多名单?你可以做类似
的事情
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);
}
);
我希望这对您有所帮助,您不清楚您到底想要什么,因为您的代码包含注释中的代码和未定义的变量
我正在尝试为我的 class 项目创建一个应用程序启动器。
我正在尝试实现一个函数,该函数将从文本文件中取出每一行并将其放入 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());
}
}
我正在试验一个字符串数组列表,但在它给我一个错误之前只让它添加了一个程序。
我该怎么做才能让它正常工作?
程序运行后,我将简化并改进我的代码,因为我知道我的编码不是最好的
因此,您希望在单击 JLabel 时执行某些操作,即从文件中读取的操作。我认为您会做一些奇怪的事情来阅读台词。为什么有这么多名单?你可以做类似
的事情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);
}
);
我希望这对您有所帮助,您不清楚您到底想要什么,因为您的代码包含注释中的代码和未定义的变量