我目前正在使用Windows,并编写一个简单的Java应用程序。
应用程序对某些文件进行了简单的搜索,我创建了一个JPanel
和一个JTextArea
,我将文本区域添加到面板中,然后输出结果,文件路径,文本区域使用append。
到目前为止一切顺利。
现在,我想知道,如果我想能够点击这些路径(好像它们是链接)来打开这些文件(它们是Word或PDF文件),我该怎么做?
我想这可能需要多行来编码,但如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:3)
我在
上输出结果,文件路径JTextArea
见How to use lists。 JList
对此更为自然。例如。如this answer中所示。
另请参阅FileBro
,其中JTree
用于文件列表,Desktop
类用于@MadProgrammer。
答案 1 :(得分:2)
查看How to Integrate with the Desktop Class
基本上你想要使用类似......
的东西File file = new File(...);
Desktop desktop = Desktop.getDesktop();
desktop.edit(file);
或
desktop.open(file);
取决于您是否要编辑或查看文件(有时它们是相同的)
查看JavaDocs for java.awt.Desktop
了解更多详情
更新了文件开头示例
根据反馈,我建议使用JList
JTextArea
列出与File
匹配的内容,这样可以更好地控制用户实际选择和设计的内容好吧,列出东西
此示例要求用户执行双击以打开文件...
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class FileListExample {
public static void main(String[] args) {
new FileListExample();
}
public FileListExample() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
File[] files = new File("...").listFiles();
DefaultListModel<File> model = new DefaultListModel<>();
for (File file : files) {
model.addElement(file);
}
JList<File> list = new JList<>(model);
list.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
JList list = (JList) e.getComponent();
File file = (File) list.getSelectedValue();
try {
Desktop desktop = Desktop.getDesktop();
desktop.open(file);
} catch (IOException exp) {
exp.printStackTrace();
}
}
}
});
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(list));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
如果你想做一些更有趣的事情,你甚至可以提供自己的ListCellRenderer
,例如......
public class FileListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
Icon icon = null;
if (value instanceof File) {
File file = (File) value;
value = file.getName();
FileSystemView view = FileSystemView.getFileSystemView();
icon = view.getSystemIcon(file);
}
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
setIcon(icon);
return this;
}
}
可以使用......
list.setCellRenderer(new FileListCellRenderer());