前言:仅供学习使用,因为现在又没什么人用java来界面了,又丑又麻烦,基本都用.net写了(直接设计界面,自动生成代码),但是学习还是可以的,不喜勿喷。
用到的技术:swing + jdbc + mysql简单的语句
成果展示:
设计思路:(其实也比较简单,也没有什么好说的)
1.需求:一个基本的备忘录只要能添加,修改,查询,删除这四个功能就能用了。
2.要完成这四个功能必须要连接数据库(我用的mysql,比较小,安装在电脑上不卡),然后利用jdbc技术对数据路进行操作。
3.用户界面:这个就比较简单了,就不多说了。
注意事项:会在相应的代码段写注释,这个真的是写完这个小程序的精华部分,写给自己看的,回头忘记了可以回头看看。
接下来就是喜闻乐见的贴出代码了(小工具的功能没有实现,要实现的话要用 I/O 相关的知识)
图形界面的代码
主界面的代码
import javax.swing.*;
public class MainMemoire extends JFrame {
JMenuBar menuBar;
JMenu menu1,menu2;
JMenuItem item1,item2,item3,item4;
public MainMemoire(String s,int x,int y,int w,int h){
init();
setTitle(s);
setVisible(true);
setLocation(x, y);
setSize(w,h);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
void init() { //为主窗口添加菜单栏
menu1 = new JMenu("备忘录管理");
menu2 = new JMenu("小工具");
item1 = new JMenuItem("添加备忘录");
item1.addActionListener(new MyMonitor(this));
item2 = new JMenuItem("修改备忘录");
item2.addActionListener(new MyMonitor(this));
item3 = new JMenuItem("查询备忘录");
item3.addActionListener(new MyMonitor(this));
item4 = new JMenuItem("删除备忘录");
item4.addActionListener(new MyMonitor(this));
menu1.add(item1);
menu1.addSeparator();
menu1.add(item2);
menu1.addSeparator();
menu1.add(item3);
menu1.addSeparator();
menu1.add(item4);
menuBar = new JMenuBar();
menuBar.add(menu1);
menuBar.add(menu2);
setJMenuBar(menuBar);
pack();
}
}import java.io.File;
public class TestMemoire {
public static void main(String[] args) {
new MainMemoire("私人备忘录",200,200,500,500);
}
}
接下来是添加备忘录的代码+添加备忘录界面按钮的监听+监听后用jdbc操作数据库的代码添加备忘录界面
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class AddMemoire extends JFrame{
JPanel panel1,panel2,panel3,panel4,panel5;
JButton button1,button2,button3;
JTextField text1,text2,text3,text4;
JTextArea area;
public AddMemoire(String s,int x,int y) {
init();
setLocation(x, y);
setTitle(s);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);;
}
void init() {
//增加备忘录的最上面的一行
panel1 = new JPanel(); //panel的默认布局模式为FlowLayout
panel1.add(new JLabel("姓名:"));
text1 = new JTextField(6);
panel1.add(text1);
panel1.add(new JLabel("类型:"));
text2 = new JTextField(6);
panel1.add(text2);
panel1.add(new JLabel("时间:"));
text3 = new JTextField(6);
panel1.add(text3);
add(panel1,BorderLayout.NORTH);
//窗口的最下面一行
button1 = new JButton("保存");
button1.addActionListener(new Monitor_add(this));
button2 = new JButton("清空");
button2.addActionListener(new Monitor_add(this));
button3 = new JButton("返回");
button3.addActionListener(new Monitor_add(this));
panel2 = new JPanel();
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
add(panel2,BorderLayout.SOUTH);
//窗口主题内容部分
panel3 = new JPanel();
panel3.setLayout(new BorderLayout());
panel4 = new JPanel();
panel4.add(new JLabel("主题:"));
text4 = new JTextField(28);
panel4.add(text4);
panel3.add(panel4,BorderLayout.NORTH);
panel5 = new JPanel();
panel5.add(new JLabel("内容:"));
area = new JTextArea(5,28);
panel5.add(area);
panel3.add(panel5,BorderLayout.CENTER);
add(panel3);
pack();
}
}
添加备忘录的监听
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Monitor_add extends Data_add implements ActionListener{
AddMemoire am;
String s=null;
String s1=null;
String s2=null;
String s3=null;
String s4=null;
String s5=null;
public Monitor_add(AddMemoire am) { // 获取AddMemoire类的对象,涉及多态,这个小操作很好用
super();
this.am = am;
}
public void actionPerformed(ActionEvent e) {
s = e.getActionCommand();
if(s.equals("保存")) {
s1 = am.text1.getText();
s2 = am.text2.getText();
s3 = am.text3.getText();
s4 = am.text4.getText();
s5 = am.area.getText();
addData(s1,s2,s3,s4,s5); //因为继承了Data_add类,所以就可以调用父类中的非静态方法
am.dispose();
}
if(s.equals("清空")) {
if(am.text1.getText() != null) {am.text1.setText(" ");}
if(am.text2.getText() != null) {am.text2.setText(" ");}
if(am.text3.getText() != null) {am.text3.setText(" ");}
if(am.text4.getText() != null) {am.text4.setText(" ");}
if(am.area.getText() != null) {am.area.setText(" ");}
}
if(s.equals("返回")) {
am.dispose();
}
}
}
添加监听后的数据库操作
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement; //其实这里可以用容器写更方便,但是我用的不熟练,先用字符串/字符数组来写
public class Data_add {
String s1=null;
String s2=null;
String s3=null;
String s4=null;
String s5=null;
public void addData(String s1,String s2,String s3,String s4,String s5) {
this.s1 = s1;
this.s2 = s2;
this.s3 = s3;
this.s4 = s4;
this.s5 = s5;
String url = "jdbc:mysql://localhost:3306/memoire";
String usename = "root";
String password = "123456";
Connection conn = null;
PreparedStatement pstmt = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,usename,password);
pstmt = conn.prepareStatement("insert into memoire(Sname,Stype,Stime,Stheme,Scontent) values(?,?,?,?,?)");
pstmt.setString(1,s1);
pstmt.setString(2,s2);
pstmt.setString(3,s3);
pstmt.setString(4,s4);
pstmt.setString(5,s5);
pstmt.executeUpdate();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(pstmt != null) {
pstmt.close();
pstmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}
}
然后再贴出一个查询备忘录的代码 顺序为: 查询界面+查询界面的按钮监听+监听后的数据库处理
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class SelectMemoire extends JFrame{
JPanel panel1,panel2,panel3,panel4,panel5;
JButton button1,button2,button3,button4;
JTextField text1,text2,text3,text4;
JTextArea area;
public SelectMemoire(String s,int x,int y) {
init();
setLocation(x, y);
setTitle(s);
setVisible(true);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);;
}
void init() {
//增加备忘录的最上面的一行
panel1 = new JPanel(); //panel的默认布局模式为FlowLayout
panel1.add(new JLabel("姓名:"));
text1 = new JTextField(6);
panel1.add(text1);
panel1.add(new JLabel("类型:"));
text2 = new JTextField(6);
panel1.add(text2);
panel1.add(new JLabel("时间:"));
text3 = new JTextField(6);
panel1.add(text3);
add(panel1,BorderLayout.NORTH);
//窗口的最下面一行
button1 = new JButton("上一条");
button1.addActionListener(new Monitor_select(this));
button2 = new JButton("下一条");
button2.addActionListener(new Monitor_select(this));
button3 = new JButton("查询");
button3.addActionListener(new Monitor_select(this));
button4 = new JButton("返回");
button4.addActionListener(new Monitor_select(this));
panel2 = new JPanel();
panel2.add(button1);
panel2.add(button2);
panel2.add(button3);
panel2.add(button4);
add(panel2,BorderLayout.SOUTH);
//窗口主题内容部分
panel3 = new JPanel();
panel3.setLayout(new BorderLayout());
panel4 = new JPanel();
panel4.add(new JLabel("主题:"));
text4 = new JTextField(28);
panel4.add(text4);
panel3.add(panel4,BorderLayout.NORTH);
panel5 = new JPanel();
panel5.add(new JLabel("内容:"));
area = new JTextArea(5,28);
panel5.add(area);
panel3.add(panel5,BorderLayout.CENTER);
add(panel3);
pack();
}
}
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Monitor_select extends Data_select implements ActionListener{
SelectMemoire sm;
String s=null;
String s1=null;
String s2=null;
String s3=null;
String s4=null;
String s5=null;
int i ;
String[] s6 = new String[5];
public Monitor_select(SelectMemoire sm) {
super();
this.sm = sm;
}
public void actionPerformed(ActionEvent e) {
s = e.getActionCommand();
if(s.equals("查询")) {
if(sm.text1.getText().equals("") ){
System.arraycopy(selectDataFirst(), 0, s6, 0, 5);
sm.text1.setText(s6[0]);
sm.text2.setText(s6[1]);
sm.text3.setText(s6[2]);
sm.text4.setText(s6[3]);
sm.area.setText(s6[4]);
}
}
if(s.equals("上一条")) {
if(sm.text1.getText().equals("") ){
System.arraycopy(selectDataFirst(), 0, s6, 0, 5);
sm.text1.setText(s6[0]);
sm.text2.setText(s6[1]);
sm.text3.setText(s6[2]);
sm.text4.setText(s6[3]);
sm.area.setText(s6[4]);
}
else {
System.arraycopy(selectDataPrivious(), 0, s6, 0, 5);
sm.text1.setText(s6[0]);
sm.text2.setText(s6[1]);
sm.text3.setText(s6[2]);
sm.text4.setText(s6[3]);
sm.area.setText(s6[4]);
}
}
if(s.equals("返回")) {
sm.dispose();
}
if(s.equals("下一条")) {
if(sm.text1.getText().equals("") ){
System.arraycopy(selectDataFirst(), 0, s6, 0, 5);
sm.text1.setText(s6[0]);
sm.text2.setText(s6[1]);
sm.text3.setText(s6[2]);
sm.text4.setText(s6[3]);
sm.area.setText(s6[4]);
}
else {
System.arraycopy(selectDataNext(), 0, s6, 0, 5);
sm.text1.setText(s6[0]);
sm.text2.setText(s6[1]);
sm.text3.setText(s6[2]);
sm.text4.setText(s6[3]);
sm.area.setText(s6[4]);
}
}
}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class Data_select {
String[] s = new String[5];
private static int i=1 ;
String url = "jdbc:mysql://localhost:3306/memoire";
String usename = "root";
String password = "123456";
Connection conn = null;
PreparedStatement pstmt = null;
Statement stmt = null;
ResultSet rs = null;
public String[] selectDataFirst() {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,usename,password);
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from memoire where Sid="+i);
while(rs.next()) {
s[0] = rs.getString("Sname");
s[1] = rs.getString("Stype");
s[2] = rs.getString("Stime");
s[3] = rs.getString("Stheme");
s[4] = rs.getString("Scontent");
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
}catch(SQLException e) {
e.printStackTrace();
}
}
return s;
}
public String[] selectDataPrivious() {
if(i>1) {
i = i-1;
System.out.println(i);
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,usename,password);
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from memoire where Sid="+i);
while(rs.next()) {
s[0] = rs.getString("Sname");
s[1] = rs.getString("Stype");
s[2] = rs.getString("Stime");
s[3] = rs.getString("Stheme");
s[4] = rs.getString("Scontent");
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
}catch(SQLException e) {
e.printStackTrace();
}
}
}
else {
s[0] ="" ;
s[1] ="";
s[2] ="";
s[3] = "";
s[4] = "前面有没数据了,请使用下一条";
}
return s;
}
public String[] selectDataNext() {
i = i+1;
System.out.println(i);
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,usename,password);
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from memoire where Sid="+i);
while(rs.next()) {
s[0] = rs.getString("Sname");
s[1] = rs.getString("Stype");
s[2] = rs.getString("Stime");
s[3] = rs.getString("Stheme");
s[4] = rs.getString("Scontent");
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
if(rs != null) {
rs.close();
rs = null;
}
if(stmt != null) {
stmt.close();
stmt = null;
}
if(conn != null) {
conn.close();
conn = null;
}
}catch(SQLException e) {
e.printStackTrace();
}
}
return s;
}
}
其他的都大同小异,会举一反三就好了。