📄 test.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 + -