您的位置:首页 > 编程语言 > Java开发

【Java】仿真qq尝试:聊天界面 && 响应用户输入

2017-04-27 15:50 387 查看
需求分析:

逐步完善一个“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:

package com.xkfx.qq.ui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class QQLogin extends JFrame implements ActionListener {
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 = new JTextField();
private JTextField txtPassword = new JTextField();

private void setComponents() {
// 组件1
JPanel panUser = new JPanel();
panUser.setLayout(new GridLayout(2, 2));

panUser.add(labUsername);
panUser.add(txtUsername);
panUser.add(labPassword);
panUser.add(txtPassword);

// 组件2
JPanel panBtn = new JPanel();
panBtn.setLayout(new FlowLayout());

panBtn.add(btnLogin);
panBtn.add(btnRegister);

// 组合
setLayout(new BorderLayout());

add(panUser, BorderLayout.CENTER);
add(panBtn, BorderLayout.SOUTH);
}

private void listenComponents() {
btnLogin.addActionListener(this);
btnRegister.addActionListener(this);
}

public QQLogin() {
// 设置窗体大小和位置
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setResizable(false);
setLocationRelativeTo(null); // 居中

// 设置组件
setComponents();

// 设置监听组件
listenComponents();
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Sign in")) {
System.out.println("用户点击了登陆");
}

if (e.getActionCommand().equals("Sign up")) {
System.out.println("用户点击了注册");
}
}
// 其实这里不需要暴露actionPerformed方法,但是无法设置成private。。。
}

class QQLoginTest {
public static void main(String[] args) {
// 暂时简单地把这里看作启动Swing程序的神器代码
EventQueue.invokeLater(() -> {
JFrame frame = new QQLogin();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 关闭窗体就结束程序。默认情况下,当关闭窗体时只是把窗体“隐藏”起来。
frame.setVisible(true);
});
}
}


QQMain:

package com.xkfx.qq.ui;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class QQMain extends JFrame implements ActionListener {
private static final int DEFAULT_WIDTH = 400;
private static final int DEFAULT_HEIGHT = 400;

private JTextField txtMessage = new JTextField();
private JComboBox cmbUser = new JComboBox();
private JButton btnSend = new JButton("Send");

private JTextArea txtArea = new JTextArea();
private JScrollPane spArea = new JScrollPane(txtArea);

//(参考书)
private void setComponents() {
// 组件1
JPanel panSmall = new JPanel();
panSmall.setLayout(new GridLayout(1, 2));

panSmall.add(cmbUser);
panSmall.add(btnSend);

// 组件2
JPanel panBig = new JPanel();
panBig.setLayout(new GridLayout(2, 1));

panBig.add(txtMessage);
panBig.add(panSmall);

// 组合
setLayout(new BorderLayout());

add(txtArea, BorderLayout.CENTER);
add(panBig, BorderLayout.NORTH);
}

private void listenComponents() {
btnSend.addActionListener(this);
}

public QQMain() {
// 设置窗体大小和位置
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setResizable(false);
setLocationRelativeTo(null); // 居中

// 设置组件
setComponents();

// 设置监听组件
listenComponents();
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("Send")) {
System.out.println("用户点击了发送");
}
}
}

class QQMainTest {
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
JFrame frame = new QQMain();
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就行了。。。(防止代码被改烂。。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: