首页 > 解决方案 > 在另一个类中使用一个类的数据(Java/FileMenuHandler)

问题描述

我有两个不同的 FileMenuHandler 用于 GUI,我需要一种方法来使用 EditMenuHandler 中 FileMenuHadler 中存储在 TreeMap 中的数据。EditMenuHandler 应该要求用户输入一个单词并在 TreeMap 中搜索该单词是否存在。

我尝试在 EMH 中创建 FMH 的实例,但树始终为空,如何在打开文件后保存树的值,然后将其用于 EditMenuHandler?

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

public class FileMenuHandler implements ActionListener{
    JFrame jframe;//creating a local JFrame 
    public FileMenuHandler (JFrame jf){//passing WordGUI Jframe
       jframe = jf;
    }

    private Container myContentPane;
    private TextArea myTextArea1;
    private TextArea myTextArea2;
    protected ArrayList<Word> uwl = new ArrayList<Word>(); 
    protected TreeMap<Word, String> tree; 

    private void readSource(File choosenFile){
        String choosenFileName = choosenFile.getName();
        TextFileInput inFile = new TextFileInput(choosenFileName);
        
        myContentPane = jframe.getContentPane();
        myTextArea1 = new TextArea();
        myTextArea2 = new TextArea();

        myTextArea1.setForeground(Color.blue);
        myTextArea2.setForeground(Color.blue);

        Font font = new Font("Times", Font.BOLD, 20);
        myTextArea1.setFont(font);
        myTextArea2.setFont(font);

        myTextArea1.setBackground(Color.yellow);
        myTextArea2.setBackground(Color.yellow);




        String paragraph = "";
        String line = inFile.readLine();
        while(line != null){
            paragraph += line + " ";
            line = inFile.readLine();
        }

        StringTokenizer st = new StringTokenizer(paragraph);
        tree = new TreeMap<Word,String>();
        while(st.hasMoreTokens()){
            
            String word = st.nextToken();
            Word w = new Word(word);
            uwl.add(w);
            tree.put(w,w.data);

        }

        for(int i = 0; i < uwl.size(); i++){
            myTextArea1.append(uwl.get(i).data + "\n");
        
            }
            
            myTextArea2.append(tree + "\n");

        
        myContentPane.add(myTextArea1);
        myContentPane.add(myTextArea2);

        jframe.setVisible(true);           
     }


    private void openFile(){
        int status;
        JFileChooser chooser = new JFileChooser("./");
        status = chooser.showOpenDialog(null);
        readSource(chooser.getSelectedFile());

    }
//instance of edit menu handler

    public void actionPerformed(ActionEvent event) {
        String menuName = event.getActionCommand();
        if (menuName.equals("Open")){
            openFile();
        }
        else if (menuName.equals("Quit")){
            System.exit(0);
        }
            
     } //actionPerformed

}
//

import java.awt.event.*;

public class EditMenuHandler implements ActionListener {
    JFrame jframe;

    public EditMenuHandler(JFrame jf) {
        jframe = jf;
    }

    public void actionPerformed(ActionEvent event) {
        String menuName = event.getActionCommand();
        if (menuName.equals("Search")) {
            JOptionPane.showMessageDialog(null, "Search");
        }
    }
}

标签: java

解决方案


有很多方法可以做到这一点,

  1. 你可以声明一个静态文件(不推荐)
  2. 使用 RXJava 或 LiveData
  3. 使用事件总线
  4. 使用接口作为监听器....

推荐阅读