Java 在执行方法之前等待拖放手势
我有一个名为Java 在执行方法之前等待拖放手势,java,drag-and-drop,awt,Java,Drag And Drop,Awt,我有一个名为FileDragDemo的类,其目的是将一个PDF文件拖放(DnD)到GUI,一旦完成,它将显示被拖放文件的路径。我们将此步骤称为第1步,它目前运行良好!然后,我想将此文件路径保存为字符串变量StringFile,并将其传递给另一个类PdfEasyManager 第2步是运行classPdfEasyManager(在上一步完全完成后)并传递StringFile变量。这就是我正在努力的地方——我创建了一个名为CallClass的方法,我希望在所有步骤1完成后执行该方法(DnD和字符串变
FileDragDemo
的类,其目的是将一个PDF文件拖放(DnD)到GUI,一旦完成,它将显示被拖放文件的路径。我们将此步骤称为第1步,它目前运行良好!然后,我想将此文件路径保存为字符串变量StringFile
,并将其传递给另一个类PdfEasyManager
第2步是运行classPdfEasyManager
(在上一步完全完成后)并传递StringFile
变量。这就是我正在努力的地方——我创建了一个名为CallClass
的方法,我希望在所有步骤1完成后执行该方法(DnD和字符串变量被存储);换句话说,我希望方法CallClass
是FileDragDemo
类中采取的最后一步。当我将CallClass
作为main方法中的最后一项时,程序在DnD手势之前执行它……换句话说,程序在调用PdfEasyManager
之前不会等待用户对文件进行DnD。我还尝试更改了CallClass
的位置,但出现了不同的错误。很抱歉代码中的所有注释,因为我正在尝试不同的东西
下面是Filedragdemo的代码:
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 String StringFile;
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 CallClass() throws Exception {
PdfEasyManager PdfEasyManagerObject = new PdfEasyManager ();
try {
PdfEasyManagerObject.main(null);
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
callClass();
}
}
@SuppressWarnings("serial")
class FileListTransferHandler extends TransferHandler {
public JList list;
public static String StringFile;
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 = (File) item;
//file1 = item;
listModel.addElement(file);
System.out.println ("%%%%%%%%%%%file... " + file);
StringFile = file.toString();
System.out.println ("%%%%%%%%%%%string... " + StringFile);
} // close for
//String filestring = file.toString();
list.setModel(listModel);
return true;
}// close try
catch (UnsupportedFlavorException e) {
return false;
} catch (IOException e) {
return false;
}
}
}
import java.io.File;
import java.io.IOException;
public class PdfEasyManager {
public static File file;
public static void main(String[] args) throws Exception {
CallEasy();
CallSearch();
/* System.out.println ("StringFile is: " + StringFile);
file = new File (StringFile);*/
//EasySearch easysearchobject = new EasySearch();
//System.out.println(easysearchobject.ToText()); //For some reason this needs to be there in order for it to work..?
/*searchPdftext searchPdftextobject = new searchPdftext();
try {
searchPdftextobject.main(null);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/
}
public static void CallEasy()throws Exception {
EasySearch easysearchobject = new EasySearch();
System.out.println(easysearchobject.ToText()); //For some reason this needs to be there in order for it to work..?
}
public static void CallSearch()throws Exception {
searchPdftext searchPdftextobject = new searchPdftext();
try {
searchPdftextobject.main(null);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
将StringFile设置为“属性”,并对triger CallClass()使用属性更改。另外,只定义一次StringFile。将StringFile设置为“属性”,并对triger CallClass()使用属性更改。也只定义一次StringFile。