簡體   English   中英

Java Swing JFileChooser將文件追加到JTextArea

[英]Java Swing JFileChooser append files to a JTextArea

我有一個瀏覽按鈕,它打開一個對話框,用戶可以在其中查看目錄和文件。 將用戶選擇的文件附加到JTextArea時遇到一些麻煩。 我正在嘗試這樣做,以便用戶可以一次選擇多個文件。 這些文件最終將被提交到Oracle數據庫。

我用於filechooser的代碼在這里:

final JFileChooser fc = new JFileChooser();
        JList list = new JList();
        fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
        if (JFileChooser.APPROVE_OPTION == fc.showOpenDialog(list)) {
        File file = fc.getSelectedFile();

您能告訴我如何將文件附加到JTextArea嗎?

謝謝。

編輯:

我添加了以下內容:

JButton btnBrowse = new JButton("Browse");
        btnBrowse.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                final JFileChooser fc = new JFileChooser();
                fc.setMultiSelectionEnabled(true);
                JList list = new JList();
                fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                if (JFileChooser.APPROVE_OPTION == fc.showOpenDialog(list)) {
                     File file = fc.getSelectedFile();
                }   
                for (File file : fc.getSelectedFiles()) {
                       log.append(file.getPath());
                    }
            }
        });

但是,當選擇瀏覽並選擇多個文件然后選擇打開時,這些文件不會顯示在文本區域內。

完整代碼:

package com.example.android.apis.appwidget;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import java.awt.Font;
import javax.swing.JFileChooser;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JCheckBox;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;
import java.awt.Color;
import javax.swing.UIManager;

public class VFSTool extends JFrame {

    private JPanel contentPane;
      static private final String newline = "\n";
        JButton openButton, saveButton;
        JTextArea log;
        JFileChooser fc;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    VFSTool frame = new VFSTool();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Tool() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 499, 423);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JLabel lblVfsLoaderTool = new JLabel("Tool");
        lblVfsLoaderTool.setBackground(new Color(255, 255, 153));
        lblVfsLoaderTool.setForeground(UIManager.getColor("Button.darkShadow"));
        lblVfsLoaderTool.setFont(new Font("Copperplate Gothic Light", Font.BOLD, 25));
        lblVfsLoaderTool.setHorizontalAlignment(SwingConstants.CENTER);
        contentPane.add(lblVfsLoaderTool, BorderLayout.NORTH);

        JPanel panel = new JPanel();
        panel.setBackground(UIManager.getColor("Button.darkShadow"));
        contentPane.add(panel, BorderLayout.CENTER);
        panel.setLayout(null);

        JButton btnBrowse = new JButton("Browse");
        btnBrowse.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {

                final JFileChooser fc = new JFileChooser();
                fc.setMultiSelectionEnabled(true);
                JList list = new JList();
                fc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                if (JFileChooser.APPROVE_OPTION == fc.showOpenDialog(list)) {
                     File file = fc.getSelectedFile();
                }   
                for (File file : fc.getSelectedFiles()) {
                    log.append(file.getPath() + System.getProperty("line.separator"));
                    }
            }
        });
        btnBrowse.setBounds(107, 185, 97, 25);
        panel.add(btnBrowse);

        JLabel lblCategory = new JLabel("label1");
        lblCategory.setForeground(UIManager.getColor("Button.background"));
        lblCategory.setBounds(12, 13, 82, 25);
        panel.add(lblCategory);

        JComboBox comboBox = new JComboBox();
        comboBox.setForeground(UIManager.getColor("Button.background"));
        comboBox.setBounds(91, 13, 113, 24);
        panel.add(comboBox);

        JLabel lblNewLabel = new JLabel("label2");
        lblNewLabel.setForeground(UIManager.getColor("Button.background"));
        lblNewLabel.setBounds(12, 50, 77, 25);
        panel.add(lblNewLabel);

        JComboBox comboBox_1 = new JComboBox();
        comboBox_1.setBounds(91, 50, 113, 25);
        panel.add(comboBox_1);

        JLabel lblLanguage = new JLabel("label3");
        lblLanguage.setForeground(UIManager.getColor("Button.background"));
        lblLanguage.setBounds(12, 114, 56, 16);
        panel.add(lblLanguage);

        JComboBox comboBox_2 = new JComboBox();
        comboBox_2.setBounds(91, 110, 113, 25);
        panel.add(comboBox_2);

        JCheckBox chckbxIncludeExt = new JCheckBox("include");
        chckbxIncludeExt.setForeground(UIManager.getColor("Button.background"));
        chckbxIncludeExt.setBackground(UIManager.getColor("Button.darkShadow"));
        chckbxIncludeExt.setBounds(12, 219, 113, 25);
        panel.add(chckbxIncludeExt);

        JButton btnSubmit = new JButton("Submit");
        btnSubmit.setBounds(107, 264, 97, 25);
        panel.add(btnSubmit);

        JTextArea textArea = new JTextArea();
        textArea.setBounds(240, 14, 219, 220);
        panel.add(textArea);
    }
}

使用JFileChooser#setMultiSelectionEnabled啟用多文件選擇,然后遍歷從getSelectedFiles返回的所有文件,並將getPath的輸出追加到JTextArea

if (JFileChooser.APPROVE_OPTION == fc.showOpenDialog(list)) {
    for (File file : fc.getSelectedFiles()) {
       myTextArea.append(file.getPath() + System.getProperty("line.separator"));
    }
}

編輯:

你應該得到這樣的堆棧跟蹤

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at swing9.VFSTool$2.actionPerformed(VFSTool.java:81)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)

這是在告訴您某些內容尚未初始化,即您的JTextArea log

這不僅沒有初始化,還沒有添加到框架中。 您可能希望將文本顯示在textArea 這僅在構造函數的范圍內可用,因此需要聲明為類成員變量。

private JTextArea textArea;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM