Java 选项卡的内容继续移动

Java tab's contents keep moving

这段代码的用途 [打开 Java 文件,然后 Java 文件的内容将显示在新标签页] 我也尝试编译 func 但我需要先在这里解决这个问题.

我的问题是当我尝试打开新的 Java 文件时,我打开的 Java 文件的最后内容累积到 Java 文件的新内容。不知道为什么,请问有什么办法可以解决吗?

package term_project_GUI;

import javax.swing.*;
import javax.swing.filechooser.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class JavaIDE_UI extends JFrame {
    Container contentPane;

    JTabbedPane tp;
    JPanel p1 = new JPanel();
    JPanel p2 = new JPanel();
    JTextArea ta = new JTextArea(15, 30);
    JScrollPane sp = new JScrollPane(ta);

    JavaIDE_UI() {
        setTitle("JavaIDE");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        createMenu();

        contentPane = getContentPane();
        contentPane.setLayout(new BorderLayout());
        tp = new JTabbedPane();
        contentPane.add(tp, BorderLayout.NORTH);
        contentPane.add(p2, BorderLayout.SOUTH);

        setSize(400, 500);
        setVisible(true);
    }

    void createMenu() {
        JMenuBar mb = new JMenuBar();
        JMenu File = new JMenu("File");
        JMenu Run = new JMenu("Run");
        JMenuItem Open = new JMenuItem("Open");
        JMenuItem Close = new JMenuItem("Close");
        JMenuItem Save = new JMenuItem("Save");
        JMenuItem SaveAs = new JMenuItem("Save As");
        JMenuItem Quit = new JMenuItem("Quit");
        JMenuItem Compile = new JMenuItem("Compile");

    Open.addActionListener(new OpenActionListener_open());

    File.add(Open);
    File.add(Close);
    File.add(Save);
    File.add(SaveAs);
    File.add(Quit);

    Run.add(Compile);

    mb.add(File);
    mb.add(Run);

    setJMenuBar(mb);
}

class OpenActionListener_open implements ActionListener {
    JFileChooser chooser;
    JTextArea ta = new JTextArea(15, 30);

    OpenActionListener_open() {
        chooser = new JFileChooser();
    }

    public void actionPerformed(ActionEvent e) {
        FileNameExtensionFilter filter = new FileNameExtensionFilter(".java files", "java");
        chooser.setFileFilter(filter);

        int ret = chooser.showOpenDialog(null);
        if (ret != JFileChooser.APPROVE_OPTION) {
            JOptionPane.showMessageDialog(null, "File Unchoose.", "Warning", JOptionPane.WARNING_MESSAGE);
            return;
        }


        String fileName = chooser.getSelectedFile().getName();
        tp.addTab(fileName, new JScrollPane(ta));

        String filePath = chooser.getSelectedFile().getPath();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filePath));
            String data = "";
            while ((data = reader.readLine()) != null) {
                ta.append(data+"\n");
            }
            reader.close();
        } catch (IOException e1) {
        }


    }
}

public static void main(String[] args) {
    new JavaIDE_UI();
}
}

您正在创建 JTextArea 的两个实例,一个是 JavaIDE_UI 的实例字段,另一个是 OpenActionListener_open.

的实例字段

当调用 actionPerformed 方法时,它会将文本附加到现有的 JTextArea(属于 OpenActionListener_open),这个过程也会将其从当前 tab/scroll 窗格并将其移动到您创建的新窗格

因此,改为为每个选项卡创建一个新的 JTextArea...

class OpenActionListener_open implements ActionListener {

    JFileChooser chooser;

    OpenActionListener_open() {
        chooser = new JFileChooser();
    }

    public void actionPerformed(ActionEvent e) {
        FileNameExtensionFilter filter = new FileNameExtensionFilter(".java files", "java");
        chooser.setFileFilter(filter);

        int ret = chooser.showOpenDialog(null);
        if (ret != JFileChooser.APPROVE_OPTION) {
            JOptionPane.showMessageDialog(null, "File Unchoose.", "Warning", JOptionPane.WARNING_MESSAGE);
            return;
        }

        String fileName = chooser.getSelectedFile().getName();
        JTextArea ta = new JTextArea();
        JScrollPane sp = new JScrollPane(ta);
        tp.addTab(fileName, sp);

        String filePath = chooser.getSelectedFile().getPath();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(filePath));
            String data = "";
            while ((data = reader.readLine()) != null) {
                ta.append(data + "\n");
            }
            reader.close();
        } catch (IOException e1) {
        }
        tp.setSelectedComponent(sp);

    }
}

此示例还将 select 选项卡,以便您可以看到新打开的文件。

此外,我会改为 contentPane.add(tp, BorderLayout.NORTH); contentPane.add(tp);,否则你会遇到一些奇怪的布局问题