单击java JTextArea或其他方法
我目前正在Windows上工作,并编写一个简单的Java应用程序 应用程序对某些文件进行简单搜索,我创建了一个单击java JTextArea或其他方法,java,swing,file,pdf,jtextarea,Java,Swing,File,Pdf,Jtextarea,我目前正在Windows上工作,并编写一个简单的Java应用程序 应用程序对某些文件进行简单搜索,我创建了一个JPanel和一个JTextArea,并将文本区域添加到面板中,然后使用append在文本区域上输出结果,即文件路径 到目前为止还不错 现在,我想知道,如果我想点击这些路径(好像它们是链接)打开那些文件(它们是Word或PDF文件),我该怎么做 我想这可能需要不止几行代码,但如果有人能给我指出正确的方向,我将不胜感激。请看 基本上你想用一些像 File file = new File(.
JPanel
和一个JTextArea
,并将文本区域添加到面板中,然后使用append在文本区域上输出结果,即文件路径
到目前为止还不错
现在,我想知道,如果我想点击这些路径(好像它们是链接)打开那些文件(它们是Word或PDF文件),我该怎么做
我想这可能需要不止几行代码,但如果有人能给我指出正确的方向,我将不胜感激。请看
基本上你想用一些像
File file = new File(...);
Desktop desktop = Desktop.getDesktop();
desktop.edit(file);
或
取决于您是否要编辑或查看文件(有时它们是相同的)
有关更多详细信息,请查看
更新了文件打开示例
根据反馈,我建议使用JTextArea
来列出匹配的文件
s,这样您就可以更好地控制确定用户实际选择和设计的内容,以及列出内容
此示例要求用户双击以打开文件
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);
}
});
}
}
可以使用
list.setCellRenderer(new FileListCellRenderer());
我在JTextArea
看。JList
将是一个更自然的组件。如图所示
另请参见使用JTree
的文件列表和@MadProgrammer提到的Desktop
类
感谢您抽出时间回复。我知道如何打开文件,我的问题是如何使文本可点击?我希望以某种方式允许用户单击文件列表并打开该文件。一旦我知道用户选择了哪个文件,我就可以打开这个文件,但我不知道如何创建一个jTextArea,或者其他一些东西,用户可以在这里选择一个文件。@user79303真的,你需要重新回答你的问题。文件名如何显示?没有上下文,很难向您提供建议。试着提供一个实际的例子。它将减少猜测工作并提供更好的结果responses@MadProgrammer我怀疑(但不确定)“选择文件”是问题的一部分。“这个问题本来可以说得更清楚一些。”安德烈·霍姆普森说,鉴于人们一直在投票,两个答案都可以证明…@MadProgrammer,我认为问题很清楚,如果不清楚,很抱歉。问题很简单:我正在对一个单词进行查询,然后返回一个文件列表,按单词出现的次数排序。我把名单拿回来了,没问题。现在,我想允许用户在该列表中选择一个文件,并将其视为网页上的链接,以便单击它将打开它。
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());