【问题标题】:Java tab's contents keep movingJava 选项卡的内容不断移动
【发布时间】:2017-12-16 06:23:51
【问题描述】:

这段代码的目的 [打开 Java 文件,然后那个 Java 文件的内容将显示在新选项卡上] 我也尝试让 compile 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

标签: java swing jtextarea jtabbedpane


【解决方案1】:

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

当调用actionPerformed 方法时,它会将文本附加到现有的JTextAreaOpenActionListener_open),该过程还将将其从当前选项卡/滚动窗格中删除并将其移动到新的您正在创建的一个

因此,为每个标签创建一个新的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);

    }
}

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

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

【讨论】:

  • 非常感谢您帮助我。我的目标是使用 GUI 编写 JavaIDE。所以最后,编译我在北窗格打印的java文件。因此,我将 BorderLayout 设置为 North。
  • 我无法输入足够多的我对此表示感谢。非常感谢
  • 当它被放置在北方位置时,我遇到了一些奇怪的布局问题
  • 是的,你这么想并不奇怪。我很抱歉忘记解释完整的问题。我认为我写的内容足以询问有关标签问题的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
  • 2021-07-19
  • 1970-01-01
相关资源
最近更新 更多