java如何实现用户在文本框中输入好友昵称,点击查询,根据用户输入匹配好友昵称,结果加载到下拉框中

作者&投稿:赫缸 (若有异议请与网页底部的电邮联系)
java根据文本框输入的内容查询 结果显示在另外的文本框中~

你可以先把sql 语句先写明着出来试试,
String sql="select * from Student where sid=‘123’“;//查询语句
然后在if(res.next()){ 第一行 加上System.out.println("0000000")打印语句
看控制台执行不,一步步排除

为输入框加一个onblur或者onchange方法,就是鼠标移除或者文本内容被修改的方法,选一个就行,方法触发一个事件,用js写一个function,function用ajax将第一个文本框里的值传递给后台,后台将该名字的年龄性别返还给前台,再将年龄性别写入到另外两个文本框内

代码如下:

import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class App extends JFrame {

private JComboBox<String> cbxNicks;

// 昵称
private String[] nicks = { 
"测试", "李二牛", "牛大胆", 
"张三", "李四", "王五"
};

public App() {

this.setSize(350, 150);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new FlowLayout());

JTextField txtNick = new JTextField();
txtNick.setPreferredSize(new Dimension(100, 23));
this.add(txtNick);

JButton btnQuery = new JButton("查询");
btnQuery.setPreferredSize(new Dimension(60, 23));
btnQuery.addActionListener(e -> {

cbxNicks.removeAllItems();

for (String nick : nicks) {
if (nick.contains(txtNick.getText())) {
cbxNicks.addItem(nick);
}
}
});
this.add(btnQuery);

cbxNicks = new JComboBox<String>();
cbxNicks.setPreferredSize(new Dimension(100, 23));
this.add(cbxNicks);
}

public static void main(String[] args) {
new App().setVisible(true);
}
}

运行结果:



监听edittext 输入事件,
匹配字符串

1.项目概述
这个项目是找来的源代码,我把源代码一行一行的自己敲进去再运行调试出来的,实际上是学习,不是我的什么开发。该项目有两个部分,一个是客户端,一个是服务器端。客户端负责监听客户端发来的信息并做出相应的处理,发送广播。客户端实现注册、登录、对话、接受广播等功能
在客户端中,没有多进程,只有一个进程负责对所有用户的处理,所以服务器广播的发送就要求所有客户端绑定一个端口。客户端中的好友列表里实际上是服务器数据库里所有的 用户,这也就是说这个项目实际上是个简单的聊天室程序,而且没有群聊,只能进行点对点的聊天,还没有文件传送这样的功能。
这里刨个坑,以后有时间有能里的时候会弥补上面的缺陷,做成一个完整的聊天室程序。具体就是:服务器改为多进程服务器,可以为每个客户开辟一个进程;客户端中实现群聊、文件传输功能。
2.运行环境与项目部署
QT4.7,以及QT -Embedded移植,安装sqlite数据库,详见我的其他博客。
3.使用说明和界面介绍
服务器端如下:
左上部分是对数据库的显示,这里只显示了ID、昵称、在线状态。

IP地址填写你的服务器主机的IP ,端口绑定8888,点击“开始监听”以后,就开始监听。发送按钮就可以把“hello client”发送出去。
客户端界面如下:
在登录和注册之前必须要设置服务器的IP地址和端口(和上面必修一致),在程序中已经写好,点击设置就可以,
点击确定后
才可注册和登录。
点击注册新帐号后弹出注册界面
填好上诉信息后确定即完成注册,然后在上面的界面中登录,登录后弹出绘画界面
下面是接受服务器的广播,上面是在线用户列表,点击其中一个弹出对话界面,
"ssss"是自己发送的内容,有下面的文本框输入,点击“发送”后显示在上面,对方的回话也现在在此。
4.tcp和udp消息的说明
在具体设计和实现之前,首先列出内部通信的信息。客户端和服务器端的功能实现就是依靠接受不同的信息,判别后才完成相应的功能
Tcp消息 服务器端 客户端
(1): “MSG_CLIENT_USER_REGISTER” 接收
并读取一起发来的ID,PWD,Name,插入数据库,若已有则发送(2),插入成功(注册成功)则发送(3) 发送
从注册界面获取的数据验证后发送,一起发送的还有ID,PWD,Name。
(2):"MSG_ID_ALREADY_EXIST" 发送
新用户数据插入数据库操作时发现已有该用户,发送此信息 接收
接收后弹出Qessage对话框,提示已经注册,不要重复注册
(3):"MSG_CLIENT_REGISTER_SUCCESS" 发送 接受
接受后将此消息通过udp发送给客户端
(4):"MSG_USER_LOGIN" 接收
同时接收的还有ID和PWD。服务器首先查询该ID是否存在,不存在则发送(5),密码不对则发送(6),已经登录则发送(7),最后发送(8) 发送
由登录界面的确定按钮发送,同时发送的还有ID和PWD。
(5):"MSG_ID_NOEXIST" 发送
服务器查询该ID不存在 接收
接收后弹出Qessage对话框,提示该ID不存在
(6):"MSG_PWD_ERROR" 发送
服务器查询密码不匹配 接收
接收后弹出Qessage对话框,提示密码不匹配
(7):"MSG_LOGIN_ALREADY" 发送
服务器查询该用户已登录 接收
接收后弹出Qessage对话框,提示该用户已登录
(8):"MSG_LOGIN_SUCCESS" 发送
发送并在数据库中修改状态为登录状态,并存储本次登录的IP 接收
接收后弹出好友界面准备聊天
Udp消息 服务器端 客户端
(1)."MSG_CLIENT_NEW_CONN" 接收
同时接受的还有本次登录的ID,此后向发送本次消息的客户端回写(5)、向所有客户端发送(7) 发送
会话界面初始化时发送,同时发送的还有该次登录的ID
(2)."MSG_CLIENT_REGISTER_SUCCESS" 接收
接受后刷新显示数据库的tableview 发送
在TCP接受(3)后发送
(3)."MSG_USER_LOGOUT" 接收
首先在数据库中设置该用户下线,刷新tableview,随后向所有用户发送(8) 发送
会话界面按下退出按钮后发送,一起发送的还有该次登录的ID
(4)."MSG_CLIENT_CHAT" 接收
接收后向对话方的客户端发送(4),一起发送的还有发起对话的客户ID以及谈话内容 发送
一起发送的还有自己的ID(发起会话的ID),对话方的ID以及谈话内容
接收
接收后调用回话界面,显示发来的内容和发起人的ID
(5)."MSG_ALL_USER_ONLINE" 接收
同时发送的还有所有在线用户的ID和NAME 接收
接受到的还有所有在线用户的ID和NAME,用于显示自己的好友列表。
(6)."MSG_SERVER_INFO" 发送
向所有用户发送系统消息,由服务器端发送按钮发送 接收
显示系统消息
(7)."MSG_NEW_USER_LOGIN" 发送
向所有用户发送新登录用户的ID和NAME 接收
在好友列表中添加这名刚登录的用户
(8)."MSG_CLIENT_LOGOUT" 发送
在接收(3)后向所有客户端发送,一起发送的还有下线用户的ID和name(显示在各个用户列表的), 接收
一起接收的还有下线用户的ID和NAME,接受后在自己的显示列表中删除这名用户
5.部分重要功能语句
很多核心的设计和代码编写都是重复的,了解这些代码将有益于程序的理解
(1).Tcp和Udp消息发送
QString msgType="MSG_ID_ALREADY_EXIST";
QByteArray block;
QDataStream out(&block,QIODevice::WriteOnly); //拿QByteArray对象来进行加工也就是所谓的串行化
out.setVersion(QDataStream::Qt_4_6); //设置数据流的版本,客户端和服务器端使用的版本要相同
out<<(quint16)0<<msgType; //这里其实要分成两部分看前面的0只是用来占空间的,后面才是真正要发送的数据
out.device()->seek(0); //吧流定位到开始的位置,这个位置是刚才用数字0来进行填充的空间
out<<(quint16)(block.size()-sizeof(quint16)); ////这里是计算出真正要发送的数据大小,把这个计算后的值填入之前提前占好的空间中
使用out<<(quint16) 0,在block的开始添加了一个quint16大小的空间,也就是两字节的空间,它用于后面放置文件的大小信息。然后out<<msgType输入实际的文件(当然msgType后面也跟追加内容,比如ID,PWD,NAME),这里是字符串"MSG_ID_ALREADY_EXIST"。当文件输入完成后我们在使用out.device()->seek(0);返回到block的开始,加入实际的文件大小信息,也就是后面的代码,它是实际文件的大小:out<<(quint16) (block.size() – sizeof(quint16))。这样block.size包括两部分:文件大小信息(2字节)+文件实际大小(msgType的长度)。
我们都在数据流的最开始写入完整文件的大小信息,这样接收端就可以根据大小信息来判断是否接受到了完整的文件。
尤其是在使用Tcp时:TCP数据是一串长长的流,你事先不知道它的长度,因此你需要现用一个东西来占用TCP流最开始的那段空间,当加入真正要发送的数据的时候,流的大小才能确定下来,这个时候就吧计算好的结果放到之前占的那个空间去
(2)static和const修饰类的成员函数
static修饰静态成员函数,const修饰的成员函数的this指针所指向的对象是一个常量。
静态函数只能使用本类中的静态成员数据或函数,不能使用非静态成员;const修饰的成员函数不能调用、修改对象的数据成员,在函数体内只能调用const修饰的成员函数,
static和const所修饰的成员函数在类呗引用时会自动运行。
使用QSqlQueryModel和QTableView可以显示数据库,代码里,数据库里有一列是表示是否在线(用01存储),1表示在线,0表示离线,但是显示的时候不希望显示“1”或者“0”,而是希望显示汉字“在线”、“离线”。
码里首先写了一个class MySqlQueryModel : public QSqlQueryModel,然后只有一个共有成员:
QVariant data(const QModelIndex &item,int role=Qt::DisplayPropertyRole) const;
其内容如下:
QVariant value=QSqlQueryModel::data(index,role);
if(value.isValid() && role==Qt::DisplayRole && index.column()==2)
{
value=(value.toInt()==1?tr("在线"):tr("离线"));
return value;
}
然后在引用QSqlQueryModel时,数据库里的0和1会自动转换成“在线”、“离线”。
(3)正则表达式
用户在界面输入的数据必须进行检验,检验合格后才能使用。比如ID号要求5~9位数字,IP号要求型如xxx.xxx.xxx.xxx等等。正则表达式准确书写比较繁琐,这里列出用的。
QRegExp rx("^[1-9]{1,2}[0-9]{4,7}$"); //5-9位ID号,第一位不能为0
QRegExp rxIp("\\d+\\.\\d+\\.\\d+\\.\\d+"); //IP地址
QRegExp rxPort(("[1-9]\\d{3,4}")); //端口号
rx.setPatternSyntax(QRegExp::RegExp);
if(!rx.exactMatch(id))
{
QMessageBox::warning(NULL,tr("提示"),tr("请输入5~9位数的QQ号"));
}
6.一些问题
在研究和调试代码的过程中遇到很多问题,有的很有价值,这里列出来。
(1).在一台机器中为什么不能登录两个客户端?
单进程的服务器广播发送要求所有客户端绑定一个公告已知的端口,程序中是“6666”,所以一台机器中不能有两个客户端运行。解决这个问题应该是设计多进程服务器,为每个客户端保留其端口号。
(2).Tcp和Udp消息的功能有何不同?
Tcp主要用户登录,Udp用于通信。
(3).chatFrrm Hash
这是一个类似与快捷方式的东西,把某个类和某个字符串(也可以是其他的)绑定。在聊天中,用户点击好友列表中的好友,相应会弹出和谁对话的对话框,比如,字符'a'就绑定了和'a'用户的聊天界面(类)
---------------------
作者:c05170519
来源:CSDN
原文:https://blog.csdn.net/c05170519/article/details/6921973?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!


ava是什么意思
ava是英文单词,是“AutomaticVoiceActivation”的缩写,中文意思是自动语音激活。它是一种用于检测和识别语音信号的技术,可以让用户通过语音来控制设备。ava的应用 ava技术可以应用于各种设备,比如智能手机、家用电器、汽车、安防系统等等。它可以帮助用户更加方便快捷地操作设备,帮助设备更加聪明地响应用户的...

ava v是什么意思?
AVA V的工作原理是先对网络进行评估,再根据网络的实际状况动态地调节视频流的码率。如果网络很好,AVA V就会激发更高码率的视频流,以提供更清晰的画面。相反,如果网络较差,AVA V就会降低视频流的码率,以减少卡顿和缓冲,实现更流畅的播放效果。AVA V广泛应用于在线视频平台、流媒体服务和视频监控等领...

ava头盔是哪个国家的
AVA头盔是一款来自中国的创新产品。它的名字来源于英文的“authentic value attitude”,意为真实、价值、态度。这款头盔的设计理念是追求真实、价值和态度,旨在为用户提供独特的骑行体验。每个人都是独立的个体,灵魂也是独一无二的。然而,在骑行的过程中,不论是在西藏、拉萨还是其他地方,当您遇到其他...

ava爱华平台怎么样
服务细致,体验好。1、AVA爱华平台是一家专注于为交易者提供一站式投资服务的平台,致力于为客户提供安全、稳健的交易体验,以及专业、贴心的服务。2、在AVA爱华平台,用户可以轻松找到适合自己的交易产品,享受高效率的交易体验。

ava闪电是什么意思?
AVA闪电是指在区块链网络中的快速交易确认网络。这使得用户可以在以太坊网络中以更快的速度完成交易,并且提供更安全的交易确认。AVA闪电网络采用独特的共识机制并结合了高效的节点选择方法,使得该网络具有出色的性能和去中心化特征。虽然AVA闪电是一种新的技术,但是它正在逐步被越来越多的人所认可和采用...

AVA体验服怎么玩?
首先,玩家需要访问AVA官方网站或游戏平台,并注册一个AVA账号。注册过程中,玩家需要提供一些个人信息,如用户名、密码、电子邮件地址等。完成注册后,玩家需要下载并安装AVA体验服的客户端。安装完成后,玩家可以使用自己的AVA账号登录体验服。在登录体验服之前,玩家需要了解体验服的一些规则和限制。一般来...

Lava-LavaLava-Lava产品介绍
注册用户超过4000万,活跃用户接近400万。其功能包括文字通讯、语音通讯、视频通讯、文件传输、文件共享、表情贴图、离线消息、远程控制、界面自定义、多语言支持等,同时提供丰富的接口服务如用户绑定接口、消息发送接口、翻译接口和用户管理接口等。合作伙伴可以通过这些接口深度整合,实现丰富的功能扩展。

一个五年ava开发经验的程序员的出路在哪里?
5、负责向项目经理及时反馈软件开发中的情况,并根据实际情况提出改进建议。6、参与软件开发和维护过程中重大技术问题的解决,参与软件首次安装调试、数据割接、用户培训和项目推广。7、负责相关技术文档的拟订。8、负责对业务领域内的技术发展动态进行分析研究。

朋友曾说它家的三星电视有那个智能控声AVA技术,这到底是个啥技术啊...
智能控声AVA技术是一项可以帮助用户减少噪音干扰的智能技术。当家里产生意外噪音时,三星电视搭载的智能控声AVA技术就能够自动调整电视场景中的声音清晰度。有了这项技术,即使是在有噪音情况下,用户也可以听清电视场景里的对话。

ava中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop...
例如,两个应用程序协调运行的用户,可以合作的一部分,作为COM对象实现(当然,现在可以做的OLE复合文档)之间的相互作用。在浏览器中执行从Web服务器下载的代码,浏览器就可以看到它作为一个COM对象。换句话说,COM技术也是一种打包下载代码的标准方法(ActiveX控件执行此功能)。 甚至是应用程序与本地操作系统交互的方法,您...

崇阳县13672323108: java窗体中如何实现文字输入,需要哪些代码? -
栋贵佰安: 从工作台中输入用java.util.Scanner.Scanner s = new Scanner(System.in); String str=s.next();如果你需要的是那种桌面应用程序的话,就写一个文本框空间,Text text=new Text();String str=text.getText();

崇阳县13672323108: 如何用java文本框里自动输入文字 -
栋贵佰安: import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; ...

崇阳县13672323108: java 在焦点文本框输入文字 -
栋贵佰安: (1)焦点在哪输入内容就在那,不用设置也不需要按钮 (2)若想知道当前在那个输入框中,在文本的onFocus事件中操作即可(如设置一个变量记录)

崇阳县13672323108: 在Java中如何从输入对话框中输入字符 -
栋贵佰安: package lesson;import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea;public class test extends Frame {TextArea textA;test(String s){super(s);setLayout(new FlowLayout());textA = new TextArea(10,10);add(textA);...

崇阳县13672323108: java程序应当如何向其他程序的文本框中输入文字呢? -
栋贵佰安: 1.6有个新特性,Robot,你可以设定鼠标和键盘事件,可以自动输入word单词,但是至于你怎么让它输入到浏览器中就麻烦了,你可以结合 Desktop类来用,这个类是用来打开本地文件或网址的,然后你用Robot来模拟tab键试试....我也没有很好的方法,你是不能得到其它程序的控件的

崇阳县13672323108: java中怎么实现在一个输入框中输入名字,另外两个输入框分别显示年龄个性别 -
栋贵佰安: 为输入框加一个onblur或者onchange方法,就是鼠标移除或者文本内容被修改的方法,选一个就行,方法触发一个事件,用js写一个function,function用ajax将第一个文本框里的值传递给后台,后台将该名字的年龄性别返还给前台,再将年龄性别写入到另外两个文本框内

崇阳县13672323108: java 要求在文本框中输入字符串,当按下回车键或单击按钮时,将输入的文字显示在文本区中 -
栋贵佰安: 给text对象和button对象加上事件响应方法即可,直接代码:import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; ...

崇阳县13672323108: 在java我要设置一个组件,在这个组件中可以输入数字,而且我需要存储用户所输入的数字,请问我该使用 -
栋贵佰安: 用swing吧,画一个窗体,然后添加一个文本框和按钮(保存),当用户在文本框中输入,点击按钮经过数字验证,通过的话取得用户输入的数字,然后后面就是保存到你指定的地方了

崇阳县13672323108: 请问,java WEB怎么实现在文本框中输入留言,然后在页面中显示出来,并且保存到数据库 -
栋贵佰安: 通过页面去输入留言,点击提交,提交到后台逻辑代码处理,主要操作就是把留言存入数据库,然后点击刷新界面,页面就会显示所有存入数据库中的留言列表!

崇阳县13672323108: Java中如何在TextField文本框中用Button输入多个字符 -
栋贵佰安: 多设置个变量,boolean型或int型都行,当你点数字时,让变量变为true或1 当你点符号的时候,让变量变为false或0,然后在每次点数字的时候设置个判断,如果为true或1,就 调用textfield.setText(number)也就是的按钮数字,反之,调用textfiled.setText(textfield.getText() + number),也就是如一楼的做法,这里的number,你在设置的时候设置为字符串就好.还有什么问题,接着问.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网