JTextArea显示但是为了对其采取进一步操作,我收到空

时间:2018-02-18 17:48:50

标签: java actionlistener jtextarea filechooser

我有一个类“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!");
        }
    }   
}

1 个答案:

答案 0 :(得分:0)

这似乎主要是一个调试问题:首先,找出showAction.getDocument()中的内容,看看你的菜单项是否没有正确加载。然后检查(使用IDE或通过toString())mf.showAction在这两种情况下确实是同一个对象。

在结构上,Java中没有任何内容阻止您在代码的两个部分中引用相同的JTextArea,并为了不同的目的从中读取文本。