我正在尝试创建一个简单的表单,它允许用户选择一个文件然后我想在主类中使用这个文件。但我有一个错误“从内部类访问可变帧”。好吧,我已经读过我必须做一个变量final,这给了我“无法为最终变量'frame'赋值”,这是正确的。再次读取stackoverflow,我发现我必须在主程序之前放置定义变量。但在这里我堆叠 - 我不认为这是一个很好的解决方案,因为我从来没有看到任何代码示例以这种方式定义变量。我仍然试过并得到错误。
public class HelloWorld {
//ExcelChooseFileFrame frame;
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
final ExcelChooseFileFrame frame;
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
frame = new ExcelChooseFileFrame();//Cannot assign a value to final variable 'frame'
}
});
}
ExcelChooseFileFrame
public class ExcelChooseFileFrame extends JFrame {
File file;
public ExcelChooseFileFrame(){
super("Choose excel");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(Box.createVerticalGlue());
final JLabel label = new JLabel("Choosed file");
label.setAlignmentX(CENTER_ALIGNMENT);
panel.add(label);
panel.add(Box.createRigidArea(new Dimension(10, 10)));
JButton button = new JButton("Show JFileChooser");
button.setAlignmentX(CENTER_ALIGNMENT);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JFileChooser fileopen = new JFileChooser();
int ret = fileopen.showDialog(null, "Open file");
if (ret == JFileChooser.APPROVE_OPTION) {
file = fileopen.getSelectedFile();
// System.out.println(file.getPath());
setVisible(false);
dispose();
}
}
});
panel.add(button);
panel.add(Box.createVerticalGlue());
getContentPane().add(panel);
setPreferredSize(new Dimension(260, 220));
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public String getPathToFile() {
return file.getPath();
}
}
我知道这是一项非常简单的任务,但是我花了几个小时试图解决它仍然没有成功。请指点我如何从main获取框架或文件对象。 谢谢!
答案 0 :(得分:0)
在HelloWorld
中,在声明它的行上初始化变量:
public final ExcelChooseFileFrame frame = new ExcelChooseFileFrame()
然后消除代码中的赋值。如果你希望从包之外的其他类中引用它,它只需要公开。