前言:仅供学习使用,因为现在又没什么人用java来界面了,又丑又麻烦,基本都用.net写了(直接设计界面,自动生成代码),但是学习还是可以的,不喜勿喷。

     用到的技术:swing + jdbc + mysql简单的语句

     成果展示:

java 实现备忘录 java备忘录程序_jdbc

java 实现备忘录 java备忘录程序_java 实现备忘录_02

java 实现备忘录 java备忘录程序_java_03

java 实现备忘录 java备忘录程序_swing_04

java 实现备忘录 java备忘录程序_界面_05

java 实现备忘录 java备忘录程序_swing_06

设计思路:(其实也比较简单,也没有什么好说的)

       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;
		
	
		
	}

	
    
}



其他的都大同小异,会举一反三就好了。