单击java JTextArea或其他方法

时间:2014-05-23 00:36:23

标签: java swing file pdf jtextarea

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

应用程序对某些文件进行了简单的搜索,我创建了一个JPanel和一个JTextArea,我将文本区域添加到面板中,然后输出结果,文件路径,文本区域使用append。

到目前为止一切顺利。

现在,我想知道,如果我想能够点击这些路径(好像它们是链接)来打开这些文件(它们是Word或PDF文件),我该怎么做?

我想这可能需要多行来编码,但如果有人能指出我正确的方向,我会很感激。

2 个答案:

答案 0 :(得分:3)

  

我在JTextArea

上输出结果,文件路径

How to use listsJList对此更为自然。例如。如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,例如......

FileList

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());