【发布时间】:2012-05-25 15:30:41
【问题描述】:
这是我的问题,我的 System.in 被重定向到 JTextField。现在用户可以按回车键,它会将我的文本发送出去。但是我的客户将无法访问这个 JTextfield,所以我想知道是否可以在我的代码中重新创建 Enter 键。
public static JTextField jtfEntree = new JTextField();
public static TexfFieldStreamer ts = new TexfFieldStreamer(jtfEntree);
System.setIn(ts);
jtfEntree.addActionListener(ts);
//************************************************************************
private void commandLaunch(String command)
//************************************************************************
{
jtfEntree.setText(command);
//here is where i want to fire the key Enter
}
//************************************************************************
class TexfFieldStreamer extends InputStream implements ActionListener{
private JTextField tf;
private String str = null;
private int pos = 0;
public TexfFieldStreamer(JTextField jtf) {
tf = jtf;
}
public int read() {
//test if the available input has reached its end
//and the EOS should be returned
if(str != null && pos == str.length()){
str =null;
//this is supposed to return -1 on "end of stream"
//but I'm having a hard time locating the constant
return java.io.StreamTokenizer.TT_EOF;
}
//no input available, block until more is available because that's
//the behavior specified in the Javadocs
while (str == null || pos >= str.length()) {
try {
//according to the docs read() should block until new input is available
synchronized (this) {
this.wait();
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
//read an additional character, return it and increment the index
return str.charAt(pos++);
}
public void actionPerformed(ActionEvent arg0)
{
// TODO Auto-generated method stub
str = tf.getText() + "\n";
pos = 0;
synchronized (this) {
//maybe this should only notify() as multiple threads may
//be waiting for input and they would now race for input
this.notify();
}
}
}
如果您需要更多信息,请在 cmets 中询问! 谢谢你的帮助
P.S.:我确实尝试将动作侦听器更改为文档侦听器,但它并不总是触发事件,因此它的行为不像我想要的那样。
尝试使用机器人,但似乎文本字段没有获得焦点,所以只是按下了键,没有任何反应
//************************************************************************
protected static void commandExecute(String Command) //COMMAND EXECUTE
//************************************************************************
{
jtfEntree.setText(Command);
jtfEntree.requestFocus();
Robot robot;
try {
robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
jtfEntree.setText("");
}
//************************************************************************
【问题讨论】:
-
“我的客户将无法访问此 JTextfield” 为什么不呢?与您的最后一个问题一样,描述最终目标是值得的,例如“提供基于命令行的工具以从远程服务器获取汇率”。实际上,您的问题听起来像*“如何使用螺丝刀安装钉子?”
标签: java swing inputstream jtextfield keyevent