[英]How To Append the Large Text Files to JTextArea in java Swing
[英]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.