将动作的结果合并到另一个动作中

时间:2014-01-15 15:06:41

标签: java swing file actionlistener tokenize

我很困惑,但看起来这对你来说很简单。 [JAVA]

我已经实现了通过按下按钮执行的操作,让我们说它的b1。按b1将导致浏览文件并将其输出到文本区域。我实现了另一个按钮,比如b2,用于生成代币

这就是我想要做的事情:

我希望b2标记文本区域(text.getText())中的文本,其中文本区域的内容由b1带来。

问题是我无法将b2中b1产生的文本内容标记化。它只是给出了空白的结果。我怀疑它无法从b1获取文本,因为文本不是全局的,它只在e.getSource == b1条件内。

[编辑] 好的,这里:

if(e.getSource()==button){
        fileChooser= new JFileChooser();
        returnVal = fileChooser.showOpenDialog(this);
        if(returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            try {
                // What to do with the file, e.g. display it in a TextArea
                text.read( new FileReader( file.getAbsolutePath() ), null );
            }catch(IOException ex){}
    }else{}
}


if(e.getSource()==b2){
        String[] token= text.getText().split(" ");
        System.out.println(token[0]);
}

当我将标记器置于b1状态时,它可以工作。但是上面没有。

似乎当我执行“text.getText()”时,它不会在b1中进行更改,您可以在其中选择文件并将其输出到文本。这就是为什么我要问是否有办法将b1完成的动作合并到b2。

1 个答案:

答案 0 :(得分:2)

我运行它时有效。 无法工作的是尝试打印token[0]。当我打印整件事时,它有效。可能发生的事情是你不允许分隔符仅由.split(" ");合并。如果文件开头有空格,则可能导致第一个令牌为空。我将其更改为.split("[\\n\\s]+");,允许分隔一个或多个字符。

if (e.getSource() == b2) {
    String[] token = text.getText().split("[\\n\\s]+");
    for (String s : token) {
        System.out.println(s);
    }
}

或许你只是忘了将听众注册到b2。 ?

这是正在运行的示例

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

public class Test3 extends JFrame {

    JButton button;
    JButton b2;
    JTextArea text;
    JFileChooser fileChooser;
    int returnVal;

    public Test3() {
        text = new JTextArea(20, 40);
        button = new JButton("Read");
        button.addActionListener(new Listener());
        b2 = new JButton("Write");
        b2.addActionListener(new Listener());

        add(button, BorderLayout.NORTH);
        add(text, BorderLayout.CENTER);
        add(b2, BorderLayout.SOUTH);

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Test3();
            }
        });

    }

    private class Listener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button) {
                fileChooser = new JFileChooser();
                returnVal = fileChooser.showOpenDialog(Test3.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    File file = fileChooser.getSelectedFile();
                    try {
                        // What to do with the file, e.g. display it in a TextArea
                        text.read(new FileReader(file.getAbsolutePath()), null);
                    } catch (IOException ex) {
                    }
                } else {
                }
            }

            if (e.getSource() == b2) {
                String[] token = text.getText().split("[\\n\\s]+");
                for (String s : token) {
                    System.out.println(s);
                }
            }
        }
    }
}

作为旁注。永远不要吞下你的例外

} catch (IOException ex) {
}

在可以看到异常的地方添加一些有意义的内容,例如

} catch (IOException ex) {
     ex.printStackTrace();
}