A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜俊彪 中级黑马   /  2012-6-1 17:07  /  2167 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜俊彪 于 2012-6-1 17:31 编辑

是当我按回车键 响应时,    文本域中的闪烁光标自动 从第一行跳到第二行; ;  这么怎么解决!!  
import java.awt.* ;
import java.awt.event.* ;
import java.net.* ;
import javax.swing.* ;

public class Adu extends JFrame {
        
        private static final long serialVersionUID = 1L;
        private JTextArea tArea01 ;
        private JTextArea tArea02 ;
        private JButton sendButton ;
        private JButton closeButton ;
        private JScrollPane sp1,sp2 ;
        
        private DatagramSocket s1 = null ;
        private DatagramSocket s2 = null ;
        
        public static int port = 11111 ;
        
        public Adu(){
                Gui() ;
                String string ;
                try {
                        string = InetAddress.getByName(InetAddress.getLocalHost().getHostAddress()).toString() ;
                        System.out.println(string);
                } catch (UnknownHostException e2) {
                        // TODO Auto-generated catch block
                        e2.printStackTrace();
                }
               
                //发送按扭 响应事件
                sendButton.addActionListener(new ActionListener() {  
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                try {
                                        s1 = new DatagramSocket() ;
                                } catch (SocketException e1) {
                                        e1.printStackTrace();
                                }
                                byte[] buf = new byte[1024] ;
                                
                                buf = tArea02.getText().getBytes() ;
                                
                                try {
                                        DatagramPacket dPacket = new DatagramPacket(buf, buf.length,
                                                        /*InetAddress.getLocalHost()*/InetAddress.getByName(InetAddress.getLocalHost().
                                                                        getHostAddress()), port) ;
                                        s1.send(dPacket) ;
                                        tArea02.setText("") ;
                                        tArea02.requestFocus() ;
                                } catch (Exception e1) {
                                        e1.printStackTrace();
                                }
                        }
                }) ;
               //关闭按扭响应事件
                closeButton.addActionListener(new ActionListener() {
                        
                        @Override
                        public void actionPerformed(ActionEvent e) {
                                // TODO Auto-generated method stub
                                
                                System.exit(0) ;
                                s1.close() ;
                                s2.close() ;
                                
                        }
                }) ;
             //回车按扭响应事件,  就是这里出了问题;当按回车键后,他自动换行了,求高手运行试下;  
                tArea02.addKeyListener(new KeyAdapter() {
                        public void keyPressed(KeyEvent e){
                                
                                if(e.getKeyCode()==KeyEvent.VK_ENTER){
                                        try {
                                                s1 = new DatagramSocket() ;
                                        } catch (SocketException e1) {
                                                e1.printStackTrace();
                                        }
                                        byte[] buf ;
                                       
                                        buf = tArea02.getText().getBytes() ;
                                       
                                        try {
                                                DatagramPacket dPacket = new DatagramPacket(buf, buf.length,
                                                                /*InetAddress.getLocalHost()*/InetAddress.getByName(InetAddress.getLocalHost().
                                                                                getHostAddress()), port) ;
                                                s1.send(dPacket) ;
                                                tArea02.setText("") ;
                                                tArea02.requestFocus() ;
                                        } catch (Exception e1) {
                                                e1.printStackTrace();
                                        }
                                }
                        }
                }) ;
                this.addWindowListener(new WindowAdapter()
                   {
                    public void windowClosing(WindowEvent w)
                    {
                     
                      if(JOptionPane.showConfirmDialog(null,"是否要退出?","退出",JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION)
                      {
                       dispose();
                       System.exit(0);
                       s1.close();
                       s2.close() ;        
                      }
                      if(JOptionPane.showConfirmDialog(null,"是否要退出?","退出",JOptionPane.YES_NO_OPTION)==JOptionPane.NO_OPTION)
                      {
                              Adu.this.setVisible(true) ;
                      }
                    }
                   });
               
                receiveData() ;
               
        }
        private void receiveData() {
                try {
                        s2 = new DatagramSocket(port) ;
                } catch (SocketException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                }
                new Thread(new Runnable()
                   {
                  
                    public void run()
                    {
                     byte buf[] = new byte[1024];
                    
                     //表示接受数据报包
                     while(true)
                     {
                      try
                      {
                       DatagramPacket dPacket = new DatagramPacket(buf,1024);
                       s2.receive(dPacket);
                       tArea01.append("【消息来自】◆" + dPacket.getAddress().getHostAddress() + "◆"+"【说】:"
                       + new String (buf,0,dPacket.getLength()) + "\r\n");
                       
                      }
                     
                      catch(Exception e)
                      {
                              if(s2.isClosed())
                          {
                           e.printStackTrace();
                          }
                      }
                     }
                    }
                   }).start() ;
               
        }
        public static void main(String arg[]){
                new Adu() ;
        }
        
        public void Gui(){
                this.setTitle("聊天窗口") ;
                Container container = getContentPane() ;
                container.setLayout(null) ;
                tArea01 = new JTextArea() ;
                tArea01.setBounds(0, 0, 550, 300) ;
                tArea01.setBackground(Color.yellow) ;
                tArea01.setLineWrap(true) ;
               
                tArea02 = new JTextArea("Type \"大家都来围观我吧\" here") ;
                tArea02.setBounds(0, 315, 550, 150) ;
                tArea02.setInputVerifier(new InputVerifier() {
                        
                        @Override
                        public boolean verify(JComponent input) {
                                JTextArea tArea = (JTextArea)input ;
                                return "大家都来围观我吧".equals(tArea.getText()) ;
                        }
                }) ;
                tArea02.setLineWrap(true) ;
               
                sendButton = new JButton("发送") ;
                sendButton.setBounds(250, 470, 75, 40) ;
                closeButton = new JButton("关闭") ;
                closeButton.setBounds(400, 470, 75, 40) ;
               
                sp1 = new JScrollPane(tArea01) ;
                sp1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) ;
                container.add(sp1) ;
                sp2 = new JScrollPane(tArea02) ;
                sp2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) ;
                container.add(sp2) ;
               
                this.setSize(600, 550) ;
                this.setLocation(200, 200) ;
                this.setUndecorated(true);
                this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
               
                container.add(tArea01) ;
                container.add(tArea02) ;
                container.add(sendButton) ;
                container.add(closeButton) ;
               
                this.setVisible(true) ;
                tArea02.requestFocus() ;
        }
}

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
  大哥 最起码你要写个注释啊。
回复 使用道具 举报
光标自动回车了是啥意思  没弄懂  - -,
回复 使用道具 举报
刘伯阳 发表于 2012-6-1 17:13
光标自动回车了是啥意思  没弄懂  - -,

我又重新注释了一个,   是当我按回车键 响应时,    文本域中的闪烁光标自动 从第一行跳到第二行;
回复 使用道具 举报
马林贺 发表于 2012-6-1 17:09
大哥 最起码你要写个注释啊。

我用红色字体注释了一个   出问题的地方,  求高手看一下,
回复 使用道具 举报
杜俊彪 发表于 2012-6-1 17:25
我又重新注释了一个,   是当我按回车键 响应时,    文本域中的闪烁光标自动 从第一行跳到第二行;  ...

用setText("");     每次发送之后,把你文本框内的内容清空
回复 使用道具 举报
刘伯阳 发表于 2012-6-1 17:36
用setText("");     每次发送之后,把你文本框内的内容清空

那么清空和光标的出现有什么关系 么?  我这里不知道怎么弄了,麻烦再给点提示提示,   
回复 使用道具 举报
杜俊彪 发表于 2012-6-1 17:50
那么清空和光标的出现有什么关系 么?  我这里不知道怎么弄了,麻烦再给点提示提示,    ...

我只是说的一种解决的办法,它跳到第二行我们可以理解第一行中有数据(全是空格),这时候我们每次发送数据后情况文本框,那么光标肯定会回到第一行的开头的。
回复 使用道具 举报
刘伯阳 发表于 2012-6-1 17:53
我只是说的一种解决的办法,它跳到第二行我们可以理解第一行中有数据(全是空格),这时候我们每次发送数 ...

如果全是空格的话,那么我按回删键应该会退到第一行的末尾吧,     可结果却是第一行第一个的位置
回复 使用道具 举报
ttkl123654 发表于 2012-6-2 08:21

谢谢大侠!  我还想问一句:就是输出文本域中,怎么让它只能显示数据而不能输入数据;就像腾讯QQ聊天程序画面一样;
回复 使用道具 举报
ttkl123654 发表于 2012-6-2 15:06
tArea01.setEditable(false);//把文本域的可编辑状态设为false就可以。

谢了,  如果当我鼠标点击tArea01的某个位置时  要有鼠标光标的闪烁,  这个怎么弄?  是不是要获取它相应坐标点的焦点?????????  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马