如何在 JTextField 中存储和显示 for 循环内容?
How to store and display the for loop contents in a JTextField?
我想在文本字段中显示丢失的文件名。
如何在JTextField
中存储和显示for循环内容?
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class CheckFiles extends JPanel {
public String FILENAME = "f:\branch_report.txt";
protected ArrayList listFromFile;
protected ArrayList listFromDir = new ArrayList();
protected void getListFromFile() {
listFromFile = new ArrayList();
BufferedReader is;
try {
is = new BufferedReader(new FileReader(FILENAME));
String line;
while ((line = is.readLine()) != null) {
listFromFile.add(line);
}
} catch (FileNotFoundException e) {
System.err.println("Can't open file list file.");
return;
} catch (IOException e) {
System.err.println("Error reading file list");
return;
}
}
public void getListFromDirectory() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("Selected file: " + selectedFile.getAbsolutePath());
listFromDir = new ArrayList();
String[] l = new java.io.File(selectedFile.getAbsolutePath()).list();
for (int i = 0; i < l.length; i++) {
listFromDir.add(l[i]);
}
} else {
JOptionPane.showMessageDialog(null, "No files selected");
}
}
public void reportMissingFiles() {
for (int i = 0; i < listFromFile.size(); i++) {
if (!listFromDir.contains(listFromFile.get(i))) {
JOptionPane.showMessageDialog(null, listFromFile.get(i), "File not found", JOptionPane.ERROR_MESSAGE); // want to display the missing files in text field
}
}
JFrame frame = new JFrame("Files Not Found");
//frame.getContentPane().add(frame,"Center");
frame.setSize(800, 600);
frame.setVisible(true);
JTextField text = new JTextField();
text.getSelectedFile().getName();
frame.add(text);
text.setVisible(true);
//final JLabel label = new JLabel();
//frame.add(label);
//label.setVisible(true);
}
public static void main(String[] argv) {
CheckFiles cf = new CheckFiles();
System.out.println("CheckFiles starting.");
cf.getListFromFile();
cf.getListFromDirectory();
cf.reportMissingFiles();
System.out.println("CheckFiles done.");
}
}
您可以用以下实现替换 reportMissingFiles()
:
public void reportMissingFiles() {
// Set for containing missing files.
Set<String> notFoundFileSet = new HashSet<>();
for (int i = 0; i < listFromFile.size(); i++) {
if (!listFromDir.contains(listFromFile.get(i))) {
JOptionPane.showMessageDialog(null, listFromFile.get(i),
"File not found", JOptionPane.ERROR_MESSAGE);
// add missing files in set
notFoundFileSet.add(listFromFile.get(i).toString());
}
}
JFrame frame = new JFrame("Files Not Found");
frame.setSize(800, 600);
frame.setVisible(true);
JTextField text = new JTextField();
// Stringify Set of missing file
text.setText(notFoundFileSet.toString());
frame.add(text);
text.setVisible(true);
}
我使用 Set<String>
来包含丢失的文件,并将 Set
的字符串版本添加到 JTextField
。您也可以简单地使用 StringBuilder
以及根据需要格式化文件名。
注意: 在你的代码中总是更喜欢 Generics,例如你应该使用 ArrayList<String> listFromFile
来制作你的程序,而不是使用 ArrayList listFromFile
输入安全。
我想在文本字段中显示丢失的文件名。
如何在JTextField
中存储和显示for循环内容?
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFileChooser;
import javax.swing.JTextField;
import java.io.File;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class CheckFiles extends JPanel {
public String FILENAME = "f:\branch_report.txt";
protected ArrayList listFromFile;
protected ArrayList listFromDir = new ArrayList();
protected void getListFromFile() {
listFromFile = new ArrayList();
BufferedReader is;
try {
is = new BufferedReader(new FileReader(FILENAME));
String line;
while ((line = is.readLine()) != null) {
listFromFile.add(line);
}
} catch (FileNotFoundException e) {
System.err.println("Can't open file list file.");
return;
} catch (IOException e) {
System.err.println("Error reading file list");
return;
}
}
public void getListFromDirectory() {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
File selectedFile = fileChooser.getSelectedFile();
System.out.println("Selected file: " + selectedFile.getAbsolutePath());
listFromDir = new ArrayList();
String[] l = new java.io.File(selectedFile.getAbsolutePath()).list();
for (int i = 0; i < l.length; i++) {
listFromDir.add(l[i]);
}
} else {
JOptionPane.showMessageDialog(null, "No files selected");
}
}
public void reportMissingFiles() {
for (int i = 0; i < listFromFile.size(); i++) {
if (!listFromDir.contains(listFromFile.get(i))) {
JOptionPane.showMessageDialog(null, listFromFile.get(i), "File not found", JOptionPane.ERROR_MESSAGE); // want to display the missing files in text field
}
}
JFrame frame = new JFrame("Files Not Found");
//frame.getContentPane().add(frame,"Center");
frame.setSize(800, 600);
frame.setVisible(true);
JTextField text = new JTextField();
text.getSelectedFile().getName();
frame.add(text);
text.setVisible(true);
//final JLabel label = new JLabel();
//frame.add(label);
//label.setVisible(true);
}
public static void main(String[] argv) {
CheckFiles cf = new CheckFiles();
System.out.println("CheckFiles starting.");
cf.getListFromFile();
cf.getListFromDirectory();
cf.reportMissingFiles();
System.out.println("CheckFiles done.");
}
}
您可以用以下实现替换 reportMissingFiles()
:
public void reportMissingFiles() {
// Set for containing missing files.
Set<String> notFoundFileSet = new HashSet<>();
for (int i = 0; i < listFromFile.size(); i++) {
if (!listFromDir.contains(listFromFile.get(i))) {
JOptionPane.showMessageDialog(null, listFromFile.get(i),
"File not found", JOptionPane.ERROR_MESSAGE);
// add missing files in set
notFoundFileSet.add(listFromFile.get(i).toString());
}
}
JFrame frame = new JFrame("Files Not Found");
frame.setSize(800, 600);
frame.setVisible(true);
JTextField text = new JTextField();
// Stringify Set of missing file
text.setText(notFoundFileSet.toString());
frame.add(text);
text.setVisible(true);
}
我使用 Set<String>
来包含丢失的文件,并将 Set
的字符串版本添加到 JTextField
。您也可以简单地使用 StringBuilder
以及根据需要格式化文件名。
注意: 在你的代码中总是更喜欢 Generics,例如你应该使用 ArrayList<String> listFromFile
来制作你的程序,而不是使用 ArrayList listFromFile
输入安全。