单击java JTextArea或其他方法

单击java JTextArea或其他方法,java,swing,file,pdf,jtextarea,Java,Swing,File,Pdf,Jtextarea,我目前正在Windows上工作,并编写一个简单的Java应用程序 应用程序对某些文件进行简单搜索,我创建了一个JPanel和一个JTextArea,并将文本区域添加到面板中,然后使用append在文本区域上输出结果,即文件路径 到目前为止还不错 现在,我想知道,如果我想点击这些路径(好像它们是链接)打开那些文件(它们是Word或PDF文件),我该怎么做 我想这可能需要不止几行代码,但如果有人能给我指出正确的方向,我将不胜感激。请看 基本上你想用一些像 File file = new File(.

我目前正在Windows上工作,并编写一个简单的Java应用程序

应用程序对某些文件进行简单搜索,我创建了一个
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());