前言
最近学完了Java高阶课程,结合MySQL,做了一个简单的短讯小系统。写篇文章记录一下
效果图
主界面如下:
点击注册我们会进入注册界面,这里我们可以创建账号,注册
注册界面如下:
接着我们返回先前界面,登录一下我之前注册好的账号注册的账号
用户界面如下:
我们输入手机号110然后点击对话键后,我们就可以对话了,里面会显示已有的界面
对话界面如下:
对话界面我们可以通过消息框发消息,如果两个账号同时登录可以通过多线程进行实时更新,就可以聊天了。
遇到的小问题
和数据库连接后无法通过Java把中文输入进去
解决方法:
只需要在设计表中将数据字符集改成编译器中所用的编码格式即可
代码块
以下为主登录界面的代码
public class Main extends JFrame {
JbdcObdcConnection con=new JbdcObdcConnection();
String s;
private JPanel contentPane;
private JTextField t1;
private JPasswordField t2;
/**
* Launch the application.
*/
public static void main(String[] args) {
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
}
catch(Exception e)
{
//TODO exception
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Main() {
setTitle("短讯");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 420, 193);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel P1 = new JPanel();
setLocationRelativeTo(null);//设置窗口默认居中1
contentPane.add(P1, BorderLayout.NORTH);
P1.setLayout(new BorderLayout(0, 0));
JPanel P3 = new JPanel();
P3.setBorder(new EmptyBorder(20, 20, 10, 5));
P1.add(P3, BorderLayout.WEST);
P3.setLayout(new GridLayout(2, 1, 5, 5));
JLabel L1 = new JLabel("手机号:");
P3.add(L1);
JLabel L2 = new JLabel("\u5BC6\u7801\uFF1A");
P3.add(L2);
JPanel P4 = new JPanel();
P4.setBorder(new EmptyBorder(20, 5, 10, 20));
P1.add(P4, BorderLayout.CENTER);
P4.setLayout(new GridLayout(2, 1, 5, 5));
t1 = new JTextField();
P4.add(t1);
t1.setColumns(10);
t2 = new JPasswordField();
P4.add(t2);
JLabel l3 = new JLabel("");
JPanel P2 = new JPanel();
FlowLayout flowLayout = (FlowLayout) P2.getLayout();
flowLayout.setVgap(0);
flowLayout.setHgap(50);
P2.setBorder(new EmptyBorder(0, 0, 20, 0));
contentPane.add(P2, BorderLayout.CENTER);
JButton b1 = new JButton("\u767B\u5F55");
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String a1,a2;
a1=t1.getText().toString();
a2=new String(t2.getPassword());
s="SELECT * FROM kehu";
ResultSet rs=con.executeQuery(s);
try {
ResultSetMetaData m =rs.getMetaData();
while(rs.next()) {
if(a1.equals(rs.getString(3))) {
if(a2.equals(rs.getString(4))) {
String a3=rs.getString(2);
User frame = new User(a3);
frame.setVisible(true);
dispose();}
else {
l3.setText("密码错误");
}
}else
l3.setText("手机号不存在");
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
P2.add(b1);
JButton b2 = new JButton("\u6CE8\u518C");
b2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ZhuCe frame = new ZhuCe();
frame.setVisible(true);
dispose();
}
});
P2.add(b2);
contentPane.add(l3, BorderLayout.SOUTH);
}
}
以下是注册界面代码
public class ZhuCe extends JFrame {
JbdcObdcConnection con=new JbdcObdcConnection();
String s;
private JPanel contentPane;
private JTextField t1;
private JTextField t2;
private JPasswordField t3;
private JPasswordField t0;
/**
* Launch the application.
*/
public static void main(String[] args) {
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
}
catch(Exception e)
{
//TODO exception
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ZhuCe frame = new ZhuCe();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public ZhuCe() {
setTitle("\u7528\u6237\u6CE8\u518C");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 451, 329);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
setLocationRelativeTo(null);//设置窗口默认居中
JLabel label = new JLabel("\u7528\u6237\u540D\uFF1A");
label.setBounds(71, 33, 66, 15);
contentPane.add(label);
JLabel l0 = new JLabel("");
t1 = new JTextField();
t1.setBounds(147, 33, 209, 23);
contentPane.add(t1);
t1.setColumns(10);
JLabel label_1 = new JLabel("\u624B\u673A\u53F7\uFF1A");
label_1.setBounds(71, 81, 66, 15);
contentPane.add(label_1);
t2 = new JTextField();
t2.setColumns(10);
t2.setBounds(147, 78, 209, 21);
contentPane.add(t2);
JLabel label_2 = new JLabel("\u5BC6\u7801\uFF1A");
label_2.setBounds(71, 122, 66, 15);
contentPane.add(label_2);
t3 = new JPasswordField();
t3.setBounds(147, 119, 209, 21);
contentPane.add(t3);
JLabel label_3 = new JLabel("\u91CD\u590D\u5BC6\u7801\uFF1A");
label_3.setBounds(71, 164, 66, 15);
contentPane.add(label_3);
JButton button = new JButton("\u6CE8\u518C");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
l0.setText("");
String a[];
a=new String[4];
a[0]=new String(t0.getPassword());
a[1]=t1.getText().toString();
a[2]=t2.getText().toString();
a[3]=new String(t3.getPassword());
if(a[1].equals(""))
{
l0.setText("用户名不能为空");return;
}
if(a[1].length()>20)
{
l0.setText("用户名过长");return;
}
if(a[2].equals(""))
{
l0.setText("手机号不能为空");return;
}
if(a[2].length()>20)
{
l0.setText("手机号过长");return;
}
for(int i=0;i<a[2].length();i++)
if(a[2].charAt(i)<'0'||a[2].charAt(i)>'9') {
l0.setText("手机号只能由数字组成");
return;
}
if(a[3].equals(""))
{
l0.setText("密码不能为空");return;
}
if(a[3].length()>20)
{
l0.setText("密码过长");return;
}
if(!a[0].equals(a[3]))
{
l0.setText("密码不一致");return;
}
s="SELECT * FROM kehu";
ResultSet rs=con.executeQuery(s);
try {
ResultSetMetaData m =rs.getMetaData();
int cloumns=m.getColumnCount();
while(rs.next()) {
for(int i=2;i<=cloumns-1;i++)
{
if(a[i-1].equals(rs.getString(i))) {
if(i==2) {
l0.setText("用户名已存在");
return;
}
if(i==3) {
l0.setText("手机号已注册");
return;
}
}
}
}
} catch (SQLException e) {
e.printStackTrace();
}
s="INSERT INTO kehu(name,tel,secret)VALUES ('"+a[1]+"','"+a[2]+"','"+a[3]+"')";
con.executeUpdate(s);
l0.setText("注册成功");
}
});
button.setBounds(77, 212, 93, 23);
contentPane.add(button);
t0 = new JPasswordField();
t0.setBounds(147, 161, 209, 21);
contentPane.add(t0);
l0.setBounds(0, 260, 338, 15);
contentPane.add(l0);
JButton button_1 = new JButton("\u91CD\u7F6E");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
t0.setText("");t1.setText("");t2.setText("");
t3.setText("");l0.setText("");
}
});
button_1.setBounds(247, 212, 93, 23);
contentPane.add(button_1);
JButton button_2 = new JButton("返回");
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Main frame = new Main();
frame.setVisible(true);
dispose();
}
});
button_2.setBounds(342, 260, 93, 23);
contentPane.add(button_2);
}
}
以下为用户界面的代码
public class User extends JFrame {
JbdcObdcConnection con=new JbdcObdcConnection();
String s;
private JPanel contentPane;
private JTextField t1;
private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
}
catch(Exception e)
{
//TODO exception
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
String number="zhi";
User frame = new User(number);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public User(String number) {
setTitle(number+"的界面");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 350, 442);
contentPane = new JPanel();
setLocationRelativeTo(null);//设置窗口默认居中
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 48, 194, 345);
contentPane.add(scrollPane);
JLabel l1 = new JLabel("");
JLabel label = new JLabel("联系人");
label.setBounds(94, 23, 54, 15);
contentPane.add(label);
JLabel label_1 = new JLabel("手机号:");
label_1.setBounds(243, 194, 81, 15);
contentPane.add(label_1);
t1 = new JTextField();
t1.setBounds(214, 219, 110, 21);
contentPane.add(t1);
t1.setColumns(10);
JButton button = new JButton("对话");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String a=t1.getText();
s="SELECT * FROM kehu";
ResultSet rs=con.executeQuery(s);
try {
ResultSetMetaData m =rs.getMetaData();
while(rs.next())
if(a.equals(rs.getString(3))) {
Message frame = new Message(number,rs.getString(2));
frame.setVisible(true);
dispose();
}
l1.setText("该手机号不存在");
}
catch (SQLException e1) {
e1.printStackTrace();
}
}
});
button.setBounds(214, 261, 112, 66);
contentPane.add(button);
table = new JTable();
Object[][]s1= {};
Object[]c= {"name","tel"};
table.setModel(new DefaultTableModel(s1,c));
DefaultTableModel model=(DefaultTableModel)table.getModel();
l1.setBounds(220, 378, 104, 15);
contentPane.add(l1);
JButton button_1 = new JButton("更新联系人");
button_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
s="SELECT * FROM kehu";
con.getConnection();
ResultSet rs=con.executeQuery(s);
table.setModel(new DefaultTableModel(s1,c));
DefaultTableModel model=(DefaultTableModel)table.getModel();
Vector v= new Vector();
v.add("姓名");v.add("电话");
model.addRow(v);
try {
ResultSetMetaData m =rs.getMetaData();
while(rs.next())
if(!rs.getString(2).equals(number)){
v=new Vector();
v.add(rs.getString(2));
v.add(rs.getString(3));
model.addRow(v);
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
button_1.setBounds(214, 66, 110, 66);
contentPane.add(button_1);
JButton button_2 = new JButton("切换账户");
button_2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Main frame = new Main();
frame.setVisible(true);
dispose();
}
});
scrollPane.setRowHeaderView(table);
button_2.setBounds(10, 0, 93, 23);
contentPane.add(button_2);
}
}
以下为对话界面的代码
public class Message extends JFrame {
JbdcObdcConnection con=new JbdcObdcConnection();
String s;
JTextArea textArea = new JTextArea();
private JPanel contentPane;
private JTextField textField;
public static String send="王寒冰",receive="贾汉尼拔";
/**
* Launch the application.
*/
public static void main(String[] args) {
try
{
BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.osLookAndFeelDecorated;
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
}
catch(Exception e)
{
//TODO exception
}
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Message frame = new Message(send,receive);
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Message(String send1,String receive1) {
send=send1;receive=receive1;
setTitle(receive);
textArea.setText("");
cs p=new cs();
new Thread(p).start();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 296, 527);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
setLocationRelativeTo(null);//设置窗口默认居中
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(0, 0, 280, 335);
contentPane.add(scrollPane);
textArea.setEnabled(false);
textArea.setFont(new Font("Monospaced", Font.PLAIN, 14));
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setViewportView(textArea);
JButton btnNewButton = new JButton("返回");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
User frame = new User(send);
frame.setVisible(true);
dispose();
}
});
btnNewButton.setBounds(150, 427, 120, 51);
contentPane.add(btnNewButton);
textField = new JTextField();
JButton btnNewButton_1 = new JButton("发送");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String a=textField.getText();
textField.setText("");
s="INSERT INTO jilu(send,receive,message)VALUES ('"+send+"','"+receive+"','"+a+"')";
con.executeUpdate(s);
}
});
btnNewButton_1.setBounds(10, 427, 120, 51);
contentPane.add(btnNewButton_1);
textField.setFont(new Font("Monospaced", Font.PLAIN, 14));
textField.setBounds(10, 357, 260, 51);
contentPane.add(textField);
textField.setColumns(10);
}
class cs implements Runnable{
int time=0;
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
test();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
private void test() {
int ji=0;
// TODO Auto-generated method stub
s="SELECT * FROM jilu";
ResultSet rs=con.executeQuery(s);
try {
ResultSetMetaData m =rs.getMetaData();
while(rs.next())
if((rs.getString(2).equals(send)&&rs.getString(3).equals(receive))||
(rs.getString(3).equals(send)&&rs.getString(2).equals(receive))){
if(time<=ji) {
time=++ji;
textArea.append(rs.getString(2)+" 对 "+rs.getString(3)+"\n");
textArea.append(rs.getString(4)+"\n");}else ji++;
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}
最后
初次写文章,如果文章有错误或建议,请在下方评论或私聊。