需求分析:

逐步完善一个“qq仿真”程序。

参考:

1、文本框与文本区:http://www.weixueyuan.net/view/6062.html

2、java布局:http://www.cnblogs.com/hthuang/p/3460234.html

效果:

login界面:

主界面:

思路:

1、先完成“精简”的本地版本

2、考虑与服务器交互

3、逐步完善功能

代码:

窗体大小方案一:

//取得屏幕的尺寸

Toolkit kit =Toolkit.getDefaultToolkit();

Dimension screenSize=kit.getScreenSize();int screenWidth =screenSize.width;int screenHeight =screenSize.height;//设置窗体尺寸、位置

setSize(screenWidth/6, screenHeight/6);

setLocationRelativeTo(null); //居中

QQLogin:

packagecom.xkfx.qq.ui;import javax.swing.*;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;public class QQLogin extends JFrame implementsActionListener {private static final int DEFAULT_WIDTH = 300;private static final int DEFAULT_HEIGHT = 200;private JButton btnLogin = new JButton("Sign in");private JButton btnRegister = new JButton("Sign up");private JLabel labUsername = new JLabel("Username");private JLabel labPassword = new JLabel("Password");private JTextField txtUsername = newJTextField();private JTextField txtPassword = newJTextField();private voidsetComponents() {//组件1

JPanel panUser = newJPanel();

panUser.setLayout(new GridLayout(2, 2));

panUser.add(labUsername);

panUser.add(txtUsername);

panUser.add(labPassword);

panUser.add(txtPassword);//组件2

JPanel panBtn = newJPanel();

panBtn.setLayout(newFlowLayout());

panBtn.add(btnLogin);

panBtn.add(btnRegister);//组合

setLayout(newBorderLayout());

add(panUser, BorderLayout.CENTER);

add(panBtn, BorderLayout.SOUTH);

}private voidlistenComponents() {

btnLogin.addActionListener(this);

btnRegister.addActionListener(this);

}publicQQLogin() {//设置窗体大小和位置

setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

setResizable(false);

setLocationRelativeTo(null); //居中//设置组件

setComponents();//设置监听组件

listenComponents();

}

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getActionCommand().equals("Sign in")) {

System.out.println("用户点击了登陆");

}if (e.getActionCommand().equals("Sign up")) {

System.out.println("用户点击了注册");

}

}//其实这里不需要暴露actionPerformed方法,但是无法设置成private。。。

}classQQLoginTest {public static voidmain(String[] args) {//暂时简单地把这里看作启动Swing程序的神器代码

EventQueue.invokeLater(() ->{

JFrame frame= newQQLogin();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体就结束程序。默认情况下,当关闭窗体时只是把窗体“隐藏”起来。

frame.setVisible(true);

});

}

}

QQMain:

packagecom.xkfx.qq.ui;import javax.swing.*;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;public class QQMain extends JFrame implementsActionListener {private static final int DEFAULT_WIDTH = 400;private static final int DEFAULT_HEIGHT = 400;private JTextField txtMessage = newJTextField();private JComboBox cmbUser = newJComboBox();private JButton btnSend = new JButton("Send");private JTextArea txtArea = newJTextArea();private JScrollPane spArea = newJScrollPane(txtArea);//(参考书)

private voidsetComponents() {//组件1

JPanel panSmall = newJPanel();

panSmall.setLayout(new GridLayout(1, 2));

panSmall.add(cmbUser);

panSmall.add(btnSend);//组件2

JPanel panBig = newJPanel();

panBig.setLayout(new GridLayout(2, 1));

panBig.add(txtMessage);

panBig.add(panSmall);//组合

setLayout(newBorderLayout());

add(txtArea, BorderLayout.CENTER);

add(panBig, BorderLayout.NORTH);

}private voidlistenComponents() {

btnSend.addActionListener(this);

}publicQQMain() {//设置窗体大小和位置

setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

setResizable(false);

setLocationRelativeTo(null); //居中//设置组件

setComponents();//设置监听组件

listenComponents();

}

@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getActionCommand().equals("Send")) {

System.out.println("用户点击了发送");

}

}

}classQQMainTest {public static voidmain(String[] args) {

EventQueue.invokeLater(()->{

JFrame frame= newQQMain();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

});

}

}

后续 & 补充:

1、用blog来管理代码多少有点不方便。。。因为代码是不断修改的。。。等到一定规模考虑搬到github上去。。。

2、用git管理本地代码。根据个人经验,小量的本地代码只需要用到:git init、git add --all、git commit -m "words"、git reflog、git reset --hard hashcode就行了。。。(防止代码被改烂。。)

java qq 界面_【Java】仿真qq尝试:聊天界面 响应用户输入相关推荐

  1. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  2. java撤销删除_[Java教程]利用npm安装/删除/发布/更新/撤销发布包

    [Java教程]利用npm安装/删除/发布/更新/撤销发布包 0 2017-06-10 00:00:32 一.什么是npm? npm是javascript的包管理工具,是前端模块化下的一个标志性产物 ...

  3. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  4. java 文本压缩_[Java基础]Java使用GZIP进行文本压缩

    import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...

  5. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...

    笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...

  6. java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

  7. 计算机考试qq用户找回密码,找回QQ密码_详细讲述QQ密码找回教程方法【图文】-太平洋电脑网PConline-太平洋电脑网...

    QQ号码对于现在大多数人来说就如我们的手机号码一样重要,而QQ密码是QQ的重要保障.QQ密码忘记后,找回QQ密码就必不可少,那么QQ密码怎么找回?怎么快速找回呢?下面我就分享下QQ密码找回的几种高几率 ...

  8. java斗地主发牌_[Java源码]扑克牌——斗地主发牌实现

    --------------------------------------- --------------------------------------- ----------一个扑克牌核心和简单 ...

  9. 苹果邮件怎么添加qq邮箱_科技资讯:QQ邮箱格式怎么填写

    最近关于QQ邮箱格式怎么填写在网上的热度是非常高的,很多网友们也都是非常关注QQ邮箱格式怎么填写这个事情,为此小编也是在网上进行了一番搜索查阅相关的信息,那么如果说有感兴趣的网友们想知道具体的情况的话 ...

  10. java小朋友猜拳_[Java教程]Java猜拳小游戏(剪刀、石头、布)

    [Java教程]Java猜拳小游戏(剪刀.石头.布) 0 2015-09-29 08:00:04 import java.util.Random;import java.util.Scanner;pu ...

最新文章

  1. 在SIFT和SURF之后,有哪些比较新的且具有一定影响力的自然图像配准算法?
  2. mysql 语音_MySQL 在各种程序语音的连接字符串(转)
  3. 趣谈设计模式 | 外观模式(Facade):为子系统提供高粒度接口
  4. python增量更新数据,Python中的增量最近邻算法
  5. I want go to school
  6. 利用F#库canopy进行UI测试
  7. 基于webpack的react脚手架
  8. windows 获取命令执行后的结果_法院判决以后,老赖欠钱不还,递交强制执行申请多久后有结果?...
  9. flush什么意思中文翻译_flush是什么意思
  10. python cos函数_Python Tensorflow cos()用法及代码示例
  11. 【RobotStudio学习笔记】(三)程序创建
  12. java+classpath的理解_Java配置path和classpath的含义详解-Go语言中文社区
  13. Wpf之MVVM线程问题
  14. Ubuntu18.04无法进入图形界面桌面的问题及解决
  15. 你不知道的 XMLHttpRequest
  16. 7、乐趣国学—趣谈“圣贤”
  17. 程序与算法的区别和内在联系(算法是什么?程序又是什么?)
  18. 码农与程序员,就好比哈士奇与狼
  19. 有哪些能给视频加特效字幕的软件?试试这几种简单方法
  20. Windows10系统登陆界面“出现问题,PIN不可用”-解决方法

热门文章

  1. 赋予mysql用户触发器权限_MYSQL设置触发器权限问题的解决方法
  2. 2017.3.15 审查(黄金) 思考记录
  3. error: expected expression before ‘;’ token的问题
  4. python商业分析_科研进阶 | 纽约大学 | 商业分析、量化金融:基于Python的商业分析工具...
  5. ie不加载jre_详细讲解!从JVM直到类加载器
  6. pv,svogi,vxgi,各自的优缺点在哪,ue4还有可能把svogi加进去吗
  7. 在另一台服务器上还原被误删的 MySQL 数据
  8. linux下的正则表达式
  9. 纯前端开发案例:用 SpreadJS 搭建信息系统软件开发平台
  10. 141.4. 分布式安装(CentOS 6 + hadoop-1.1.2)