我很困惑,但看起来这对你来说很简单。 [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。
答案 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();
}