如何访问相同的文本区域变量?

How can I access the same text area variable?

下面的代码是这样工作的:

我尝试将其设为全局变量,因为它位于两个不同的 classes 中。 运行 的缺点是,一旦用户单击“运行 按钮”,在 GUI class 中初始化的文本区域将更新。

public class GUI{
        static JTextArea textArea;
    public GUI() {
        JFrame frame = new JFrame();
        textArea = new JTextArea(5,30);
        JButton runButton = new JButton("Remove JS");
        JButton importButton = new JButton("Import File");
        JPanel panel = new JPanel();
        
        runButton.addActionListener(new runApp());
        runButton.setBounds(100, 100, 100, 80);
        importButton.addActionListener(new importFile());
        importButton.setBounds(100, 100, 80, 60);
        
        panel.setBorder(BorderFactory.createEmptyBorder(300, 300 , 150, 150));
        panel.setLayout(new GridLayout(0, 1));
        panel.add(textArea);
        panel.add(runButton);
        panel.add(importButton);
        
        frame.add(panel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("JavaScript Extractor");
        frame.pack();
        frame.setVisible(true);
    }

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

    }
}

class runApp implements ActionListener{
    public void actionPerformed(ActionEvent arg0) {
        
        RemoveScript run = new RemoveScript();
        

        try {
            File fileObject = new File("C:\Users\coker\Documents\readJS.txt");
            Scanner reader = new Scanner(fileObject);
            while(reader.hasNextLine()) {
                String output = reader.nextLine();
                textArea.setText(run.removeScript(output));
            }
            reader.close();
        }catch(FileNotFoundException e) {
            System.out.println("An error has occured.");
            e.printStackTrace();
        }
    }
}

3 个选项:

  • 使您的侦听器 class 成为 GUI 的内部 class,然后它将可以访问其外部 class 的所有字段(不需要 static例)
  • 保持 2 class 完全独立,并将对文本字段的引用传递给侦听器(例如,通过构造函数参数)。
  • 通过GUI.textArea
  • 访问静态字段