黑马程序员技术交流社区

标题: 为什么文本区域没有显示内容 [打印本页]

作者: 黄玉昆    时间: 2013-4-21 21:41
标题: 为什么文本区域没有显示内容
今天复习GUI,复习得有些头晕了,写了好几次,似乎不能触发事件,先看代码吧,在文本区域不能显示我输入到文本框中的内容:
  1. package cn.comapny.test.gui;

  2. import java.awt.Button;
  3. import java.awt.FlowLayout;
  4. import java.awt.Frame;
  5. import java.awt.TextArea;
  6. import java.awt.TextField;
  7. import java.awt.event.KeyAdapter;
  8. import java.awt.event.KeyEvent;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.awt.event.WindowAdapter;
  12. import java.awt.event.WindowEvent;

  13. public class KeyEventDemo {

  14.         /**
  15.          * 键盘事件
  16.          * 将输入文本框中的内容显示在文本区域
  17.          */
  18.         public static void main(String[] args) {
  19.                 new KeyEvents("键盘事件");

  20.         }

  21. }

  22. class KeyEvents extends Frame {
  23.         //创建成员变量
  24.         private TextField tf = null;
  25.         private TextArea ta = null;
  26.         private Button b = null;

  27.         public KeyEvents(String title) {
  28.                 init();
  29.         }
  30.        
  31.         //初始化窗体和组件
  32.         private void init() {
  33.                 setBounds(200, 300, 500, 600);
  34.                 setLayout(new FlowLayout());
  35.                 b = new Button("转到");
  36.                 tf = new TextField(60);
  37.                 ta = new TextArea(25, 75);
  38.                 add(tf);
  39.                 add(b);
  40.                 add(ta);
  41.                 setVisible(true);
  42.                 //监听事件
  43.                 events();
  44.         }

  45.         //创建事件监听
  46.         private void events() {
  47.                 //添加窗体监听,关闭窗体
  48.                 addWindowListener(new WindowAdapter() {
  49.                         public void windowClosing(WindowEvent e) {
  50.                                 System.exit(0);
  51.                         }
  52.                 });
  53.                 //添加文本框的键盘监听
  54.                 tf.addKeyListener(new KeyAdapter() {
  55.                         public void keyPressed(KeyEvent e) {
  56.                                 //回车则将输入内容显示在文本区域
  57.                                 if (e.getKeyCode() == KeyEvent.VK_ENTER){
  58.                                         showInfo();
  59.                                 }
  60.                         }
  61.                 });
  62.                 //添加按钮监听,单击鼠标触发事件
  63.                 b.addMouseListener(new MouseAdapter() {
  64.                         public void mouseClicked(MouseEvent e) {
  65.                                 showInfo();
  66.                         }
  67.                 });
  68.         }
  69.         //显示信息
  70.         private void showInfo() {
  71.                 tf.setText("");
  72.                 String str = tf.getText();
  73.                 System.out.println(str);
  74.                 ta.append(str);
  75.         }
  76. }
复制代码

作者: 乘鱼飞    时间: 2013-4-21 22:10
本帖最后由 乘鱼飞 于 2013-4-21 22:15 编辑

改成这样就行了
   package za;



   import java.awt.Button;
   import java.awt.FlowLayout;
   import java.awt.Frame;
   import java.awt.TextArea;
   import java.awt.TextField;
   import java.awt.event.KeyAdapter;
   import java.awt.event.KeyEvent;
   import java.awt.event.MouseAdapter;
   import java.awt.event.MouseEvent;
   import java.awt.event.WindowAdapter;
   import java.awt.event.WindowEvent;

   public class KeyEventDemo {

           /**
            * 键盘事件
            * 将输入文本框中的内容显示在文本区域
            */
           public static void main(String[] args) {
                   new KeyEvents("键盘事件");

           }

   }

   class KeyEvents extends Frame {
           //创建成员变量
           private TextField tf = null;
           private TextArea ta = null;
           private Button b = null;

           public KeyEvents(String title) {
                   init();
           }
           
           //初始化窗体和组件
           private void init() {
                   setBounds(200, 300, 500, 600);
                   setLayout(new FlowLayout());
                   b = new Button("转到");
                   tf = new TextField(60);
                   ta = new TextArea(25, 75);
                   add(tf);
                   add(b);
                   add(ta);
                   setVisible(true);
                   //监听事件
                   events();
           }

           //创建事件监听
           private void events() {
                   //添加窗体监听,关闭窗体
                   addWindowListener(new WindowAdapter() {
                           public void windowClosing(WindowEvent e) {
                                   System.exit(0);
                           }
                   });
                   //添加文本框的键盘监听
                   tf.addKeyListener(new KeyAdapter() {
                           public void keyPressed(KeyEvent e) {
                                   //回车则将输入内容显示在文本区域
                           
                                           showInfo();
                                                         }
                   });
                   //添加按钮监听,单击鼠标触发事件
                   b.addMouseListener(new MouseAdapter() {
                           public void mouseClicked(MouseEvent e) {
                                 
                                   showInfo();
                                 
                           }
                   });
           }
           //显示信息
           private void showInfo() {
                   //tf.setText("");
                   String str = tf.getText();
                    //System.out.println(str);
                   ta.append(str);
           }
   }

         把        tf.setText("");     
System.out.println(str);
给去掉就行了
作者: 孟群峰    时间: 2013-4-21 22:11
找的好辛苦啊!
private void showInfo() {
                tf.setText("");-------错误了应该是ta.setText();那样你每次调用showInfo()时,把你输入的内容清空了啊!!!当然不会显示啊
                String str = tf.getText();
                System.out.println(str);
                ta.append(str);
        }
作者: 陈圳    时间: 2013-4-21 22:15
  1. package AWT;

  2. import java.awt.Button;
  3. import java.awt.FlowLayout;
  4. import java.awt.Frame;
  5. import java.awt.TextArea;
  6. import java.awt.TextField;
  7. import java.awt.event.KeyAdapter;
  8. import java.awt.event.KeyEvent;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.awt.event.WindowAdapter;
  12. import java.awt.event.WindowEvent;

  13. import javax.swing.JOptionPane;

  14. public class KeyEventDemo {

  15.         /**
  16.          * 键盘事件
  17.          * 将输入文本框中的内容显示在文本区域
  18.          */
  19.         public static void main(String[] args) {
  20.                 new KeyEvents("键盘事件");

  21.         }

  22. }

  23. class KeyEvents extends Frame {
  24.         //创建成员变量
  25.         private TextField tf = null;
  26.         private TextArea ta = null;
  27.         private Button b = null;

  28.         public KeyEvents(String title) {
  29.                 init();
  30.         }
  31.         
  32.         //初始化窗体和组件
  33.         private void init() {
  34.                 setBounds(200, 300, 500, 600);
  35.                 setLayout(new FlowLayout());
  36.                 b = new Button("转到");
  37.                 tf = new TextField(60);
  38.                 ta = new TextArea(25, 75);
  39.                 add(tf);
  40.                 add(b);
  41.                 add(ta);
  42.                 setVisible(true);
  43.                 //监听事件
  44.                 events();
  45.         }

  46.         //创建事件监听
  47.         private void events() {
  48.                 //添加窗体监听,关闭窗体
  49.                 addWindowListener(new WindowAdapter() {
  50.                         public void windowClosing(WindowEvent e) {
  51.                                 System.exit(0);
  52.                         }
  53.                 });
  54.                 //添加文本框的键盘监听
  55.                 tf.addKeyListener(new KeyAdapter() {
  56.                         public void keyPressed(KeyEvent e) {
  57.                                 //回车则将输入内容显示在文本区域
  58.                                 if (e.getKeyChar() == KeyEvent.VK_ENTER){
  59.                                         showInfo();
  60.                                         JOptionPane.showMessageDialog(null, "回车按下了");
  61.                                 }
  62.                         }
  63.                 });
  64.                 //添加按钮监听,单击鼠标触发事件
  65.                 b.addMouseListener(new MouseAdapter() {
  66.                         public void mouseClicked(MouseEvent e) {
  67.                                 showInfo();
  68. //                                ta.append(tf.getText());
  69.                                 JOptionPane.showMessageDialog(null, "鼠标点击了");
  70.                         }
  71.                 });
  72.         }
  73.         //显示信息
  74.         private void showInfo() {
  75.                 tf.setText("");//你把它先清空了...
  76.                 String str = tf.getText();
  77.                 System.out.println("str=  "+tf.getText());
  78.                 ta.append(str);
  79.         }
  80. }
复制代码
写窗体,建议不要用awt, 用swing好一些.你的窗体设计不合理,文本域超过窗体了.如果输入一俩个字符,正常是看不到的.
作者: 黄玉昆    时间: 2013-4-21 22:24
乘鱼飞 发表于 2013-4-21 22:10
改成这样就行了
   package za;

可是去掉了之后,我按回车,文本框中的内容还是存在啊,我的意思是输入完后,文本框的清除掉,文本区域的显示处输入的内容,并且下次输入不在一行上
作者: 黄玉昆    时间: 2013-4-21 22:28
陈圳 发表于 2013-4-21 22:15
写窗体,建议不要用awt, 用swing好一些.你的窗体设计不合理,文本域超过窗体了.如果输入一俩个字符,正常是看 ...

我理解这个swing是个轻量级的开发包,但是一般主要还是在用awt,swing也离不开awt的。我这里设置确实有点不太合理,改进了一下。
学GUI比较头疼的,我还得多看看啊
作者: 乘鱼飞    时间: 2013-4-21 22:28
本帖最后由 乘鱼飞 于 2013-4-21 22:30 编辑
  1.     private void showInfo() {
  2.                   
  3.                    String str = tf.getText();
  4.                   // System.out.println(str);
  5.                    ta.append(str);
  6.                    tf.setText("");
  7.            }
复制代码
把   tf.setText("");
移到append 下面就可以了
不再一行上 好像不会
作者: 黄玉昆    时间: 2013-4-21 22:29
孟群峰 发表于 2013-4-21 22:11
找的好辛苦啊!
private void showInfo() {
                tf.setText("");-------错误了应该是ta.setTex ...

谢谢,问题已经找到了,其实把这句话移到最下面就行了,是位置错误了,谢谢你啊
作者: 黄玉昆    时间: 2013-4-21 22:31
乘鱼飞 发表于 2013-4-21 22:28
把   tf.setText("");
移到append 下面就可以了
不再一行上 好像不会

嗯啊,已经移到最后了,还在append里加了换行。成功了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2