如果不采用JTextField和JTextArea组件,使用什么swing可以实现和那个命令行程序一样的功能呢?

解决方案 »

  1.   

    可以给jt添加事件监听器啊,例如:
      JTextField jt = new JTextField(20);
      JTextArea ja = new JTextArea(20, 20);
      
      jt.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            String text = jt.getText();
            if(text.equals("link"))
              ja.setText("What host are you linking to?");
            jt.setText("");
          }
        });
      

  2.   

    但是我要连续获取4次过更多次的参数,最后执行location.link()函数,我给JTextField注册是事件是当keyPressed的时候,调用另一个类中的interpretCommand(String msg)函数(msg=jTextField.getText()),这个函数的功能很多,有create,talk,pick, link只是其中的一个命令,我第1次在JTextField输入link后,可以正常执行interpretCommand(String msg) {
                   cmd = msg;.........      if (cmd.equals("talk")) {
                    
                   }
                   else if (cmd.equals("link")) {
                                    }
                   else if (cmd.equals("create")) {
                    }
    .......
    }
    link{ }中第1句,但是接下来,我再从JTextArea中输入host name的时候,再调用interpretCommand(),便无法识别host name这个命令了.我感觉楼上的方法不太可行,可能是没明白我的意思,还是谢谢,继续顶
      

  3.   

    JTextField jt = new JTextField(20);
      JTextArea ja = new JTextArea(20, 20);
      
      jt.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            String text = jt.getText();
            if(text.equals("link")){
              ja.setText("What host are you linking to?");
              String host=ja.readLine();
              ja.setText("...")
              String me=......
    添加其他的用来接受参数
    然后调用interpretCommand(host,me,,,),
          }
            if (text.equals("me")){
          定义其他的...
          }
        });
      

  4.   

    actionPerformed方法每当你在jt里输入完毕后按回车就引发事件,然后他会比较if条件来选择相应的代码执行,不知道我这个方法合不合你心?其实和 fdm_sea(klesh) 一个意思拉,可能你对JAVA不熟悉吧?我学JAVA也才一个月 和·~~我也不熟悉,如果不合你的心意,那我只能说是班门弄斧了 和~~~
      

  5.   

    但是JTextField,JTextArea中没有readLine()这个方法,我一次按了回车后,这个if(text.equals("link")){}中的代码就全部被一次执行了,这样无法给我一次次获取参数的几乎,其实那个命令行模式中的getLine()就是因为可以使用readLine(),从而可以一步步的获取参数,命令行模式的getLine()方法如下:
        static BufferedReader in =
    new BufferedReader(new InputStreamReader(System.in));
            public static String getLine(String prompt) {
            String line = null;
            do {                      // Loop until a non-empty line is entered
                try {
                    System.out.print(prompt);             // Display prompt
                    System.out.flush();                   // Display it right away
                    line = in.readLine();                 // Get a line of input
                    if (line != null) line = line.trim(); // Strip off whitespace
                } catch (Exception e) {}                // Ignore any errors
            } while((line == null) || (line.length() == 0));
            return line;
        }现在其实我要解决的问题,就是在swing组件中用什么样的方法可以代替命令行中的这个readLine()方法
      

  6.   

    我现在想了另一个方法来解决这个问题,但不知道是否可行,如果可行,大家给个代码例子.
    在Gui这个类中仿照命令行模式中的getLine(){}写一个方法,
    当按下会车的时候,便回从JTextField中获取输入的内容,并返回line,如果没有回车,该方法一直处于等待状态,不返回.提醒一下:并不是传统的事件模型那样,当回车按下的时候,调用readLine()这个方法.这个readLine()方法是被其他类中的interpretCommand(){ }方法块中调用的.
      

  7.   

    public int getCarePosition() 获得插入文本的位置。
    public int getSelectionEnd() 获得选定文本的结束位置。
    public int getSelectionStart() 获得选定文本的开始位置。
    public String getSelectedText() 获得TextComponent中被选择的文本。
    public String getText() 获得TextComponent的文本。
    public void select(int start,int end) 选择TextComponent中介于选定位置之间的文本。
    public void selectAll() 选择TextComponent中所有的文本。
    public void setEditable(boolean e) setEditable:设定TextComponent是否可以编辑,若设定为true表示可以编辑;若设定为false表示不可以编辑。
    public void setText(String text) 设定文本字符串为TextComponent的内容。
      

  8.   

    我在另一个帖子里,有人说可以用线程来实现:
    回复人: abcdhy(程旭) 当按下会车的时候,便回从JTextField中获取输入的内容,并返回line,如果没有回车,该方法一直处于等待状态,不返回晕,使用多线程就可以了啊!你不使用事件模型,就是怕 read() 不返回,把整个GUI都卡住了.你可以在JTextField里开启另一个线程,在里另一个线程调用 read() 方法就可以了啊!
    具体你自己实现吧!
    看到点希望了,但是使用线程的话如何判断用户是否输入完一条信息,并且按了回车键?继续讨论,顶