我们正在尝试将变量file
传递给另一个类。我们在这些方面遇到了问题:
file = (File) item;
listModel.addElement(file);
在课程开始时我们声明了我们认为可以在整个班级中使用的字段file
..然而,当我们到达提到的行时,我们得到错误file cannot be resolved to a variable
如果我们将file
作为局部变量,则该类可以正常工作,但是我们无法将变量file
传递给另一个类。
以下是代码:
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
@SuppressWarnings("serial")
public class FileDragDemo extends JPanel {
public static File file;
public static List data;
public JList list = new JList();
public FileDragDemo() {
list.setDragEnabled(true);
list.setTransferHandler(new FileListTransferHandler(list));
add(new JScrollPane(list));
}
public static void createAndShowGui() {
FileDragDemo mainPanel = new FileDragDemo();
JFrame frame = new JFrame("FileDragDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) throws Exception {
//String filestring ="";
//data = new List;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
PdfEasyManager PdfEasyManagerObject = new PdfEasyManager();
try {
PdfEasyManagerObject.main(args);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
@SuppressWarnings("serial")
class FileListTransferHandler extends TransferHandler {
public JList list;
public FileListTransferHandler(JList list) {
this.list = list;
}
public int getSourceActions(JComponent c) {
return COPY_OR_MOVE;
}
public boolean canImport(TransferSupport ts) {
return ts.isDataFlavorSupported(DataFlavor.javaFileListFlavor);
}
public boolean importData(TransferSupport ts) {
try {
@SuppressWarnings("rawtypes")
List data = (List) ts.getTransferable().getTransferData(
DataFlavor.javaFileListFlavor);
if (data.size() < 1) {
return false;
}// close if
DefaultListModel listModel = new DefaultListModel();
for (Object item : data) {
file = (File) item;
listModel.addElement(file);
} // close for
//String filestring = file.toString();
list.setModel(listModel);
return true;
}// close try
catch (UnsupportedFlavorException e) {
return false;
} catch (IOException e) {
return false;
}
}
}
答案 0 :(得分:4)
静态字段file
在类FileDragDemo
中声明。但是,您使用它的行位于另一个名为FileListTransferHandler
的类中。如果要在此类的方法中访问它,则必须使用声明类限定字段访问:FileDragDemo.file
。
然而,在你发布的代码中我认为使用这个静态变量似乎不太优雅,我会在这里使用局部变量。通常可以而且应该避免使用静态变量。
答案 1 :(得分:1)
您只能使用声明它的类中的字段file
。您有两个类:FileDragDemo
声明字段file
,但类FileListTransferHandler
尝试使用它。这确实应该给你所描述的错误。
要解决此问题,您可以在类FileListTransferHandler
中声明类FileDragDemo
。要做到这一点,只需在内部类声明后关闭外部类声明的}
,如下所示:
public class FileDragDemo {
// ...
class FileListTransferHandler {
// ...
}
}