原代碼在控制台打印文件內容,欲顯示於 JFrame 中,但未將讀取邏輯與界面組件綁定。
public class ReadFile extends JFrame {
private JTextArea textArea;
public ReadFile() {
setTitle("文件查看器");
setSize(400, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
textArea = new JTextArea();
textArea.setEditable(false);
textArea.setFont(new Font("Monospaced", Font.PLAIN, 14));
add(new JScrollPane(textArea), BorderLayout.CENTER);
JButton btnLoad = new JButton("加載文件");
btnLoad.addActionListener(e -> loadFile());
add(btnLoad, BorderLayout.SOUTH);
}
private void loadFile() {
JFileChooser chooser = new JFileChooser();
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
textArea.read(br, null); // 一鍵讀入
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "讀取失敗: " + ex.getMessage());
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new ReadFile().setVisible(true));
}
}
readLine() + append() 更簡潔高效。new SwingWorker() {
@Override
protected Void doInBackground() {
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) publish(line);
} catch (IOException e) { ... }
return null;
}
@Override
protected void process(List chunks) {
for (String line : chunks) textArea.append(line + "\n");
}
}.execute();