java - 在另一个类中使用一个类的数据(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");
}
}
}
解决方案
有很多方法可以做到这一点,
- 你可以声明一个静态文件(不推荐)
- 使用 RXJava 或 LiveData
- 使用事件总线
- 使用接口作为监听器....
推荐阅读
- java - 西班牙语字符 (ú, í ) 在带有 Wicket 的 UI 上更改为 (ó , Ã) 并用 Java 编码
- python - 如何在没有表单模型的情况下创建帖子?
- javascript - Pass in Django Template Variable to JS function
- python - 如何制作内容每年增加一个单位的django模型字段
- django - 使用AWS弹性beantalk(使用nginx + gunicorn)部署django时出现ERR_CONNECTION_TIMED_OUT
- c# - Xunit 模拟 TokenClient 调用
- cs50 - CS50 复数 - 无法理解为什么使用 Candidate_count
- postgresql - PostgreSQL SSL 设置 DigitalOcean
- excel - 使用 Excel VBA 为 y 轴标签单独着色
- c# - 从同一视图在 asp.net mvc 中发布数据和绑定值后,尝试返回同一视图并在那里绑定数据