我有一个类“MainFrame1”,它扩展了一个JFrame,另一个类是一个文件选择器。每当我按下MainFrame1类中的一个JMenuItem时,我希望文件选择器打开并加载在MainFrame1类中创建的JTextArea上所选文件的文本。当我创建一个实现ActionListener的单独类时,这完全正常。现在我的问题是,当我按下另一个JMenuItem时,我想对JTextArea中的文本执行其他操作。我已经在另一个类中实现了另一个ActionListener,但问题是当我这样做时,JTextArea似乎是空的,尽管我可以看到那里的文本。提前谢谢。
这就是我在MainFrame1中创建JTextArea的方法:
showAction = new JTextArea(10,10);
showAction.setEditable(false);
showAction.setFont(new Font("Arial", Font.BOLD, 12));
add(showAction, BorderLayout.NORTH);
这是我的第二个ActionListener类(同样,每当文件的文本在JTextArea中打印时,文本“已加载。”也将被打印)并且我总是得到else分支。
public class TransformController implements ActionListener{
MainFrame1 mf;
public TransformController(MainFrame1 mf) {
this.mf = mf;
}
@Override
public void actionPerformed(ActionEvent e) {
String text = mf.showAction.getDocument().toString();
if(text.contains("loaded up.")) {
char[] charText = text.toCharArray();
Parser parser1 = new Parser(charText);
parser1.packageVisitor();
}
else {
System.out.println("Load up a Java file first!");
}
}
}
答案 0 :(得分:0)
这似乎主要是一个调试问题:首先,找出showAction.getDocument()中的内容,看看你的菜单项是否没有正确加载。然后检查(使用IDE或通过toString())mf.showAction在这两种情况下确实是同一个对象。
在结构上,Java中没有任何内容阻止您在代码的两个部分中引用相同的JTextArea,并为了不同的目的从中读取文本。