⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.java

📁 将使用数据库和Java技术
💻 JAVA
字号:

/*
 *			This project use SQL RDBMS
 *
 *	Before using this project,please create the ODBC DataSource names "JAVADB"
 *
*/

package Test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.sql.*;

//甘特图窗口
class PaintFrame extends Frame
{
	int totaldistances;
	String Task[];
	int singledistances[];
	int startdistances[];
	int fillnum=0;
	
	Color[] color={Color.RED,Color.BLUE,Color.GREEN,Color.YELLOW,Color.LIGHT_GRAY,Color.ORANGE,Color.PINK};
	
	public PaintFrame()
	{
		setTitle("Gantt Chart");
		setSize(600,600);
		addWindowListener(new MyWindowAdapter());
		repaint();
	}
	
	private class MyWindowAdapter extends WindowAdapter
	{
		public void windowClosing(WindowEvent we)
		{
			hide();
		}
	}
	
	public void paint(Graphics g)
	{
		int intX=150,intY=50,width=8,height=20;
		super.paint(g);
		g.setColor(Color.black);
		g.drawRect(intX,intY,50*totaldistances,Task.length*50);
		g.drawRect(intX,intY+20,50*totaldistances,Task.length*50-20);
		for(int i=1;i<=totaldistances+1;i++)
		{
			if(i%fillnum!=0)
			{
				g.drawRect(intX,intY,width,height);
			}
			else
			{
				g.fillRect(intX,intY,width,height);
			}
			intX+=width;
		}
		
		intX=150;
		intY=70;
		
		for(int i=0;i<Task.length;i++)
		{
			try
			{
				if(!Task[i].equals(""))
				{
					g.setColor(color[i%7]);
					g.fillRect(intX+startdistances[i]*width,intY,(singledistances[i]+1)*width,height);
					g.setColor(Color.black);
					g.drawString(Task[i],10,intY+10);
					intY+=50;
				}
			}catch(Exception e){}
		}
	}
	
	public void setData(int d,String[] t,int[] dd,int[] dds,int f)
	{
		totaldistances=d;
		Task=t;
		singledistances=dd;
		startdistances=dds;
		fillnum=f;
		repaint();
	}
}

//标签面板
class LabelPanel extends Panel
{
	Label lblID=new Label("ID",Label.CENTER);
	Label lblTask=new Label("Task",Label.CENTER);
	Label lblStart=new Label("Start",Label.CENTER);
	Label lblEnd=new Label("End",Label.CENTER);
	
	public LabelPanel()
	{
		setLayout(new GridLayout(1,4));
		add(lblID);
		add(lblTask);
		add(lblStart);
		add(lblEnd);		
	}
}

//文本框面板
class TextFieldPanel extends Panel
{
	TextField[] txtID=new TextField[10];
	TextField[] txtTask=new TextField[10];	
	TextField[] txtStart=new TextField[10];
	TextField[] txtEnd=new TextField[10];	

	public TextFieldPanel()
	{
		for(int i=0;i<10;i++)
		{
			txtID[i]=new TextField(5);
			txtTask[i]=new TextField(20);
			txtStart[i]=new TextField(10);
			txtEnd[i]=new TextField(10);
		}
		for(int i=0;i<10;i++)
		{
			add(txtID[i]);
			add(txtTask[i]);
			add(txtStart[i]);
			add(txtEnd[i]);
		}
	}
	
	public void paintComponent(Graphics g)
	{
		super.paintComponents(g);
		g.setColor(Color.yellow);
		g.fillRect(0,0,100,100);
	}	
}

//提示面板
class MessagePanel extends Panel
{
	Label lblMessage=new Label("日期的格式为:yy-mm-dd",Label.CENTER);
	public MessagePanel()
	{
		setLayout(new BorderLayout());
		setForeground(Color.red);
		add(lblMessage,BorderLayout.CENTER);
	}
	
	public void changeMessage(String str)
	{
		lblMessage.setText(str);
	}
}
	
//按钮面板
class ButtonPanel extends Panel
{
	Button btnDisplay=new Button("Display");
	Button btnSubmit=new Button("Submit");
	Button btnGantt=new Button("Gantt");
	
	public ButtonPanel()
	{
		setLayout(new FlowLayout());
		add(btnDisplay);
		add(btnSubmit);
		add(btnGantt);
	}	
}

//提示与按钮面板
class MBPanel extends Panel
{
	MessagePanel mp=new MessagePanel();
	ButtonPanel bp=new ButtonPanel();
	
	public MBPanel()
	{
		setLayout(new GridLayout(2,1));
		add(mp);
		add(bp);
	}
}

//主窗体
class MainFrame extends Frame
{
	LabelPanel lp=new LabelPanel();
	TextFieldPanel tp=new TextFieldPanel();
	//ButtonPanel bp=new ButtonPanel();
	MBPanel mbp=new MBPanel();
	PaintFrame pf=new PaintFrame();
	
	Connection con;
	Statement stmt;
	String sql;
	ResultSet rs;
	
	public MainFrame()	
	{
		setSize(500,500);
		setTitle("Gantt Chart");
		setResizable(false);
		setLayout(new BorderLayout());
		add(lp,BorderLayout.NORTH);
		add(tp,BorderLayout.CENTER);
		//add(bp,BorderLayout.SOUTH);
		add(mbp,BorderLayout.SOUTH);
	
		addWindowListener(new MyWindowAdapter());
		//bp.btnGantt.addActionListener(new MyActionListener());
		mbp.bp.btnDisplay.addActionListener(new MyActionListener());
		mbp.bp.btnSubmit.addActionListener(new MyActionListener());
		mbp.bp.btnGantt.addActionListener(new MyActionListener());	
		mbp.bp.btnSubmit.setEnabled(false);
		
		for(int i=0;i<10;i++)
		{
			tp.txtID[i].addFocusListener(new MyFocusAdapter());
		}
	}
	
	private class MyActionListener implements ActionListener
	{
		public void actionPerformed(ActionEvent ae)
		{
			int intindex=0;
			String TaskID="",Task="",StartTime="",EndTime="";
			try
			{
				Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
				con=DriverManager.getConnection("jdbc:odbc:JAVADB");
				stmt=con.createStatement();
				
				sql="select count(*) as recordcount from gantt";
				rs=stmt.executeQuery(sql);
				rs.next();
				if(rs.getInt("recordcount")==0)
				{
					mbp.bp.btnSubmit.setEnabled(true);
					mbp.mp.lblMessage.setText("There is no record in table Gantt");
				}
				else
				{
					mbp.mp.lblMessage.setText("日期的格式为:yy-mm-dd");
				}
				
				if(ae.getSource()==mbp.bp.btnDisplay)
				{
					intindex=0;					
					sql="select * from gantt";
					rs=stmt.executeQuery(sql);
					while(rs.next())
					{
						tp.txtID[intindex].setText(String.valueOf(rs.getInt("TaskID")));
						tp.txtTask[intindex].setText(rs.getString("Task"));
						tp.txtStart[intindex].setText(String.valueOf(rs.getDate("StartTime")));
						tp.txtEnd[intindex].setText(String.valueOf(rs.getDate("EndTime")));
						intindex+=1;					
					}
					mbp.bp.btnSubmit.setEnabled(true);
				}
				else if(ae.getSource()==mbp.bp.btnSubmit)
				{
					intindex=0;
						
					sql="truncate table gantt";
					stmt.executeUpdate(sql);
					
					for(intindex=0;intindex<10;intindex++)
					{
						if(!tp.txtID[intindex].equals(""))
						{
							TaskID=tp.txtID[intindex].getText();
							Task=tp.txtTask[intindex].getText();
							StartTime=tp.txtStart[intindex].getText();
							EndTime=tp.txtEnd[intindex].getText();
							
							try
							{
								sql="insert into gantt values("+Integer.parseInt(TaskID)+",'"+Task+"','"+StartTime+"','"+EndTime+"')";
								stmt.executeUpdate(sql);
							}
							catch(Exception e){}
						}
					}
					ClearText();
					mbp.mp.lblMessage.setText("Update Successful");	
					mbp.bp.btnSubmit.setEnabled(false);
				}
				//if(ae.getSource()==bp.btnGantt)
				else if(ae.getSource()==mbp.bp.btnGantt)
				{
					intindex=0;
					String[] datepart={"dd","wk","mm","qq","yy"};
					int[] fillnumber={7,4,4,4,10};
					
					String dp="";
					int fillnum=0;
					//取得总的间隔数
					int totaldistances=0;
					for(int i=0;i<datepart.length;i++)
					{
						sql=datediff(datepart[i]);
						totaldistances=gettotaldistances(sql);
						if(totaldistances>=100)
						{
							continue;
						}
						else
						{
							dp=datepart[i];
							fillnum=fillnumber[i];
							break;
						}
					}

					//取得单个间隔数和task内容
					int[] singledistances=new int[10];
					int[] startdistances=new int[10];
					String[] strTask=new String[10];
					
					sql="select datediff("+dp+",starttime,endtime) as singledistances,task from gantt";
					rs=stmt.executeQuery(sql);
					
					while(rs.next())
					{				
						singledistances[intindex]=rs.getInt("singledistances");
						strTask[intindex]=rs.getString("task");
						intindex+=1;				
					}

					//取得单个开始时间与最小的开始时间间隔					
					sql="select min(starttime) as minstarttime from gantt";
					rs=stmt.executeQuery(sql);
					rs.next();
					String minstarttime=String.valueOf(rs.getDate("minstarttime"));
					sql="select datediff("+dp+",'"+minstarttime+"',starttime) as singledistances from gantt";
					rs=stmt.executeQuery(sql);
					intindex=0;
					while(rs.next())
					{
						startdistances[intindex]=rs.getInt("singledistances");
						intindex+=1;
					}
					
					pf.setData(totaldistances,strTask,singledistances,startdistances,fillnum);
					pf.show();
				}
			}
			catch(Exception e){e.printStackTrace();}
		}
		
		//设置取得时间间隔的SQL语句
		public String datediff(String datepart)
		{
			return "select datediff("+datepart+",min(starttime),max(endtime)) as distances from gantt";
		}
		
		//取得时间间隔数
		public int gettotaldistances(String sql)
		{
			int distances=0;
			try
			{
				rs=stmt.executeQuery(sql);
				rs.next();
				distances=rs.getInt("distances");
			}catch(Exception e){}
			return distances;
		}
		
		//清除文本框内容
		public void ClearText()
		{
			for(int i=0;i<10;i++)
			{
				tp.txtID[i].setText("");
				tp.txtTask[i].setText("");
				tp.txtStart[i].setText("");
				tp.txtEnd[i].setText("");
			}
		}
	}
	
	private class MyWindowAdapter extends WindowAdapter
	{
		public void windowClosing(WindowEvent we)
		{
			System.exit(0);
		}
	}
	
	private class MyFocusAdapter extends FocusAdapter
	{
		public void focusGained(FocusEvent fe)
		{
			int n;
			try
			{
				for(int i=1;i<10;i++)
				{
					if(fe.getSource()==tp.txtID[i]&&tp.txtID[i-1].getText()!="")
					{
						n=Integer.parseInt(tp.txtID[i-1].getText())+1;
						tp.txtID[i].setText(String.valueOf(n));
						break;
					}
				}
			}catch(Exception e){}
		}
	}
}

public class Test 
{
	public static void main(String[] args)
	{
		MainFrame mf=new MainFrame();
		mf.show();	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -