gpt4 book ai didi

Java分离方法和最终变量

转载 作者:行者123 更新时间:2023-11-30 07:03:51 25 4
gpt4 key购买 nike

我有一个名为 Finestrella.java 的 Java 类,我在其中声明了两个私有(private)变量:

private File selectedPDF
private String selectedPDFName

在 main 中,我有以下代码,在单击按钮后将这些变量与 ActionListener 一起使用:

JButton btnNewButton = new JButton("Select PDF File");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JFileChooser fc = new JFileChooser(System.getProperty("user.home") + System.getProperty("file.separator") + "Desktop");
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter("Select a PDF Document", "pdf");
fc.setFileFilter(filter);
fc.setAcceptAllFileFilterUsed(false);
int returnVal = fc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
selectedPDF = fc.getSelectedFile();
selectedPDFName = selectedPDF.getName();
} else {
// Executed when no file selected
}
}
});

因为这只是全部代码的一部分,所以我考虑将其全部放在另一个名为 Functions.java

的类中
static public void setPDF (JFrame myFrame, File selectedPDF, String selectedPDFName) {
// the code I wrote before
}

并在 Finestrella.java 中调用它:

Functions.setPDF(myFrame, selectedPDF, selectedPDFName);

当然,我得到一个错误,因为它说 selectedPDF 和 selectedPDFName 必须声明为 final。问题是,变量是在 Finestrella.java 中创建的,但我的方法是在 Functions.java 中。此外,我需要这两个变量供以后在其他方法中使用,这些方法将在 Finestrella.java 中调用,但实际上在其他类中。

我尝试做的事情:

  • 将 setPDF 的参数声明为最终参数,
  • 在 Finestrella.java 中将变量声明为 final

但是我运气不好。我明白什么是最终变量,但在这一点上,我认为我的程序结构肯定有问题。我想要实现的是拥有一个干净的 main() 方法,其中仅调用位于另一个类中的基本函数。

最佳答案

然后你应该提取你的内部类并从新类中获取字段;出现该错误的唯一原因是它必须 final 才能访问内部类中的字段。类似的东西,

static class MyListener implements ActionListener {
private File selectedPDF;
private String selectedPDFName;

public File getSelectedPDF() {
return selectedPDF;
}

public String getSelectedName() {
return selectedPDFName;
}

public void actionPerformed(ActionEvent arg0) {
JFileChooser fc = new JFileChooser(System.getProperty("user.home")
+ System.getProperty("file.separator") + "Desktop");
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"Select a PDF Document", "pdf");
fc.setFileFilter(filter);
fc.setAcceptAllFileFilterUsed(false);
int returnVal = fc.showOpenDialog(null);
if (returnVal == JFileChooser.APPROVE_OPTION) {
selectedPDF = fc.getSelectedFile();
selectedPDFName = selectedPDF.getName();
} else {
// Executed when no file selected
}
}
}

然后

JButton btnNewButton = new JButton("Select PDF File");
MyListener my = new MyListener();
btnNewButton.addActionListener(my);

关于Java分离方法和最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28067966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com