用java做QQ登录界面的写法如下:
package ch10
import java.awt.*
import java.awt.event.*
import javax.swing.*
1、//定义该类继承自JFrame,实现ActionListener接口
public class LoginTest extends JFrame implements ActionListener
{
2、//创建JPanel对象
private JPanel jp=new JPanel()
3、//创建3个标并加入数组
JLabel name = new JLabel("请输入用户名")
JLabel password = new JLabel("请输入密码")
JLabel show = new JLabel("")
private JLabel[] jl={name,password,show}
4、//创建登陆和重置按扭并加入数组
JButton login = new JButton("登陆")
JButton reset = new JButton("重置")
private JButton[] jb={login,reset}
5、//创建文本框以及密码框
private JTextField jName=new JTextField()
private JPasswordField jPassword =new JPasswordField()
public LoginTest()
{
6、//设置布局管理器为空布局,这里自己摆放按钮、标签和文本框
jp.setLayout(null)
for(int i=0i<2i++)
{
7、//设置标签和按扭的位置与大小
jl[i].setBounds(30,20+40*i,180,20)
jb[i].setBounds(30+110*i,100,80,20)
8、//添加标签和按扭到JPanel容器中
jp.add(jl[i])
jp.add(jb[i])
//为2个按钮注册动作事件监听器
jb[i].addActionListener(this)
}
9、//设置文本框的位置和大小,注意满足美观并足够用户名的长度
jName.setBounds(130,15,100,20)
10、//添加文本框到JPanel容器中
jp.add(jName)
11、//为文本框注册动作事件监听器
jName.addActionListener(this)
12、//设置密码框的位置和大小,注意满足美观和足够密码的长度
jPassword.setBounds(130,60,100,20)
13、//添加密码框到JPanel容器中
jp.add(jPassword)
14、//设置密码框中的回显字符,这里设置美元符号
jPassword.setEchoChar('$')
15、//为密码框注册动作事件监听器
jPassword.addActionListener(this)
16、//设置用于显示登陆状态的标签大小位置,并将其添加进JPanel容器
jl[2].setBounds(10,180,270,20)
jp.add(jl[2])
17、//添加JPanel容器到窗体中
this.add(jp)
18、//设置窗体的标题、位置、大小、可见性及关闭动作
this.setTitle("登陆窗口")
this.setBounds(200,200,270,250)
this.setVisible(true)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
}
19、//实现动作监听器接口中的方法actionPerformed
public void actionPerformed(ActionEvent e)
{
20、//如果事件源为文本框
if(e.getSource()==jName)
{
21、//切换输入焦点到密码框
jPassword.requestFocus()
}
22、//如果事件源为重置按扭
else if(e.getSource()==jb[1])
{
23、//清空姓名文本框、密码框和show标签中的所有信息
jl[2].setText("")
jName.setText("")
jPassword.setText("")
24、//让输入焦点回到文本框
jName.requestFocus()
}
25、//如果事件源为登陆按钮,则判断登录名和密码是否正确
else
{
26、//判断用户名和密码是否匹配
if(jName.getText().equals("lixiangguo")&&
String.valueOf(jPassword.getPassword()).equals("19801001"))
{
27、jl[2].setText("登陆成功,欢迎您的到来!")
}
else
{
28、jl[2].setText("对不起,您的用户名或密码错误!")
}
}
}
public static void main(String[] args)
{
29、//创建LoginTest窗体对象
new LoginTest()
}
}
方法/步骤
准备工作
在正式接入之前你需要了解以下名词的含义:
1. appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。
2. appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。
3. redirecturl:成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。
4. access token:用来判断用户在本网站上的登录状态,具有3个月有效期,用户再次登录时自动刷新。
5. openid:是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有帐号进行绑定。
第一步
要接入QQ登录,必不可少的是appid和appkey,通过申请接入QQ登录,按照相应步骤操作即可轻松获得,在此不做赘述。
第二步
在需要放置QQ登录按钮的页面加入下面SCRIPT代码:
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="APPID" data-redirecturi="REDIRECTURI" charset="utf-8"></script>
PS:APPID 和 REDIRECTURI 换成第一步申请所得到的对应内容,REDIRECTURI 就是登录之后返回的回调地址,在申请页面自己填写,一般写网站主域名即可。注意:回调地址必须以http或https开头。
第三步
在页面放置一个元素节点用来展现登录按钮,并且指定其ID,如:
<div id="qq"></div>
然后在页面加入如下SCRIPT:
<script type="text/javascript">
QC.Login({
btnId:"qq" //插入按钮的节点id
})
</script>
这时就可以在页面看到如下效果:
如对这个展示效果不满意,也可以自定义登录按钮。
第四步
在 REDIRECTURI 即回调地址页面加入如下SCRIPT:
<script type="text/javascript"
src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" charset="utf-8" data-callback="true"></script>
另外:官方说法如果回调地址页与加入QQ登录按钮是同一个页面,则只需要引用一次脚本文件。如果理解不了这种官方说法,可以在第一步的脚本中加入data-callback="true"属性,而忽略第四步,前提是回调地址页与加入QQ登录按钮的页面是同一个页面。
第五步
因为JS SDK封装了获取Access Token以及OpenID的方法,因此开发者不需要用开发代码进行获取,直接调用QQ登录OpenAPI即可。
调用OpenAPI时,请统一遵循下述调用方式:
QC.api(api, paras, fmt, method)
参数说明:
最后
提供一种代码接入思路,仅供参考:
QC.api("get_user_info", {}) //get_user_info是API参数
//指定接口访问成功的接收函数,s为成功返回Response对象
.success(function (s) {
//成功回调,通过s.data获取OpenAPI的返回数据
nick = s.data.nickname//获得昵称
headurl = s.data.figureurl_qq_1//获得头像
if (QC.Login.check()) {//判断是否登录
QC.Login.getMe(function (openId, accessToken) { //这里可以得到openId和accessToken
//下面可以调用自己的保存方法
……
})
}
})
//指定接口访问失败的接收函数,f为失败返回Response对象
.error(function (f) {
//失败回调
alert("获取用户信息失败!")
})
////指定接口完成请求后的接收函数,c为完成请求返回Response对象
//.complete(function (c) {
// //完成请求回调
// alert("获取用户信息完成!")
//})