JavaSwing 船只停靠管理可视化(三)
项目源码 :https://github.com/Wo-com/ShipPort
如果觉得不错的话就在GitHub里面给个Star吧
JavaSwing 船只停靠管理可视化,功能选项卡实现,通过继承JPanel添加功能。
MainUI 为项目框架。Pane为选项卡,选项卡实现具体的功能。
项目界面结构:
Mainui 源代码:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import javax.swing.JTabbedPane;
import javax.swing.JLabel; public class MainUI { public static JFrame frame; /**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
new MainUI();
} catch (Exception e) {
e.printStackTrace();
}
}
});
} /**
* Create the application.
*/
public MainUI() {
initialize();
} /**
* Initialize the contents of the frame.
*/
private void initialize() { frame = new JFrame("船只停靠管理可视化");
frame.setBounds(100, 100, 840, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.NORTH); JLabel label = new JLabel("欢迎使用,本管理系统,没有使用任何框架,界面可随意拖动,界面与数据操作分离方便修改");
panel.add(label); JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(tabbedPane, BorderLayout.CENTER); Pane1 panel_1 = new Pane1();
tabbedPane.addTab("泊位管理", null, panel_1, null);
panel_1.setLayout(null);//清空布局 Pane2 panel_2 = new Pane2();
tabbedPane.addTab("船只管理", null, panel_2, null);
panel_2.setLayout(null);//清空布局 Pane3 panel_3 = new Pane3();
tabbedPane.addTab("停靠指定", null, panel_3, null);
panel_3.setLayout(null);//清空布局 Pane4 panel_4 = new Pane4();
tabbedPane.addTab("查看甘特图", null, panel_4, null);
panel_4.setLayout(null);//清空布局 } }
Pane1效果图:实现对泊位的增删改查
Pane1源码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField; import consql.Dao; public class Pane1 extends JPanel{ private static final long serialVersionUID = 1L;
Pane1(){
System.out.println("面板1被调用");
initialize();
} private void initialize() {
Dao db = new Dao();
db.connSQL(); JLabel lblNewLabel_1 = new JLabel("泊位ID");
lblNewLabel_1.setBounds(81, 32, 61, 16); //初始位置
this.add(lblNewLabel_1); JTextField textField = new JTextField();
textField.setBounds(190, 27, 130, 26); //初始位置
this.add(textField);
textField.setColumns(10); JLabel lblNewLabel_2 = new JLabel("泊位名称");
lblNewLabel_2.setBounds(81, 73, 61, 16); //初始位置
this.add(lblNewLabel_2); JTextField textField_1 = new JTextField();
textField_1.setBounds(190, 65, 130, 26); //初始位置
this.add(textField_1);
textField_1.setColumns(10); JButton btnNewButton = new JButton("添加");
btnNewButton.setBounds(44, 101, 55, 58); //初始位置
this.add(btnNewButton); JButton btnNewButton_1 = new JButton("查看");
btnNewButton_1.setBounds(145, 103, 61, 58); //初始位置
this.add(btnNewButton_1); JButton btnNewButton_2 = new JButton("删除");
btnNewButton_2.setBounds(259, 103, 61, 58); //初始位置
this.add(btnNewButton_2); JButton btnNewButton_3 = new JButton("更改");
btnNewButton_3.setBounds(345, 65, 78, 29); //初始位置
this.add(btnNewButton_3); JButton btnNewButton_4 = new JButton("帮助");
btnNewButton_4.setBounds(362, 101, 61, 58); //初始位置
this.add(btnNewButton_4); JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(0, 100, 570, 200);
// scrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); //水平滚动条
// scrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); //垂直滚动条
this.add(scrollPane); btnNewButton.addActionListener(new ActionListener()//添加按钮
{
public void actionPerformed(ActionEvent e4)
{
try{
String id = textField.getText(); // 取得用文本框ID
String name = textField_1.getText(); // 取得用name
if((id.length()==0)||(name.length()==0)){
JOptionPane.showMessageDialog(null,"插入数据为空成功","插入数据失败",JOptionPane.PLAIN_MESSAGE);
}else{
//获取行数
String sqlline = "select * from port"; ResultSet rs = db.selectSQL(sqlline);
rs.last() ; int row = rs.getRow()+1; rs.beforeFirst();//光标回滚 获取行数 光标回滚 String sql1 = "insert into port(id,name,num_add) values("+id+",'"+name+"','"+row+"')";
boolean tf;
tf=db.insertSQL(sql1);
if (tf){
JOptionPane.showMessageDialog(null,"插入id:"+id+" 泊位:"+name+" 成功","插入数据",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"插入id:"+id+" 泊位:"+name+" 失败","插入数据",JOptionPane.PLAIN_MESSAGE);
}
}
System.out.println("添加执行完成");
}catch(Exception e1){
System.out.println("面板1,查询出错");
}
}
}
); btnNewButton_1.addActionListener(new ActionListener()//查询按钮
{
public void actionPerformed(ActionEvent e4)
{
try{
String id = textField.getText(); // 取得用文本框ID
String[] columnNames = { "Id", "泊位名","泊位编号"};
String sql2;
if (id.length()==0){
sql2 = "select * from port";
}else{
sql2 = "select * from port where id='"+id+"'";
}
ResultSet rs = db.selectSQL(sql2);
rs.last() ; int row = rs.getRow(); rs.beforeFirst();//光标回滚 获取行数 光标回滚
String data[][] =new String[row][3];
row=0;
while(rs.next()){
data[row][0]=rs.getString(1);
data[row][1]=rs.getString(2);
int num=rs.getInt(3);
data[row][2]=String.valueOf(num);
row++;
}
JTable table = new JTable(data, columnNames);
scrollPane.setViewportView(table);
System.out.println("查询"+row+"行,完成查询");
}catch(Exception e1){
System.out.println("面板1,查询出错");
}
}
}
); btnNewButton_2.addActionListener(new ActionListener()//监听删除泊位
{
public void actionPerformed(ActionEvent e4)
{
try{
String id = textField.getText();// 取得用ID
String sql3 = "delete from port where id='"+id+"';";
boolean dl;
dl=db.deleteSQL(sql3);
if (dl){
JOptionPane.showMessageDialog(null,"删除id:"+id+"成功","删除数据",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"删除id:"+id+"失败","删除数据",JOptionPane.PLAIN_MESSAGE);
}
System.out.println("面板1 删除完成");
}catch(Exception e1){
System.out.println("面板1 删除出错");
}
}
}
);
btnNewButton_3.addActionListener(new ActionListener()// 数据修改
{
public void actionPerformed(ActionEvent e4)
{
try{
String id = textField.getText(); // 取得用ID
String name = textField_1.getText(); // 取得用name if (name.length()!=0){ //修改name
String sql = "update port set name='"+name+"' where id='"+id+"';";
boolean na;
na=db.updateSQL(sql);
if (na){
JOptionPane.showMessageDialog(null,"更改名字成功","更新数据",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"更改名字失败","更新数据",JOptionPane.PLAIN_MESSAGE);
}
}
System.out.print("面板1 更新完成");
}catch(Exception e1){
System.out.print("面板1 更新出错");
}
}
}
); btnNewButton_4.addActionListener(new ActionListener()// 提示帮助
{
public void actionPerformed(ActionEvent e4)
{
try{ JOptionPane.showMessageDialog(null,"在查询时,ID文本框为空查询的是全部数据\n输入ID时查询的时一条数据","查询提示",JOptionPane.PLAIN_MESSAGE);
System.out.print("面板1 帮助完成");
}catch(Exception e1){
System.out.print("面板1 帮助出错");
}
}
}
); int between=11; //定义分段
this.addComponentListener(new ComponentAdapter() {//拖动窗口监听
public void componentResized(ComponentEvent e) {
int width=MainUI.frame.getWidth(); //获取窗口宽度
int height=MainUI.frame.getHeight(); //获取窗口高度 lblNewLabel_1.setBounds(width/between*2, 10, width/between, 20);
textField.setBounds(width/between*3, 10, width/between*2, 20);
lblNewLabel_2.setBounds(width/between*6, 10, width/between, 20);
textField_1.setBounds(width/between*7, 10, width/between*2, 20); btnNewButton.setBounds(width/between*1, 40, 60, 20);
btnNewButton_1.setBounds(width/between*3,40, 60, 20);
btnNewButton_2.setBounds(width/between*5, 40, 60, 20);
btnNewButton_3.setBounds(width/between*7, 40, 60, 20);
btnNewButton_4.setBounds(width/between*9, 40, 60, 20); scrollPane.setBounds(0, 70, width-30,height-170); }
}); } }
Pane2 效果图:实现对船只的增删改查。
Pane2源码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.sql.ResultSet;
import java.sql.Timestamp;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JTextPane; import consql.Dao; public class Pane2 extends JPanel{ private static final long serialVersionUID = 1L;
Pane2(){
System.out.println("面板2被调用");
initialize();
} private void initialize() {
Dao db = new Dao();
db.connSQL(); JSplitPane splitPane = new JSplitPane();
splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
splitPane.setDividerLocation(300);
this.add(splitPane); JSplitPane splitPane_1 = new JSplitPane();
splitPane_1.setDividerLocation(300);
//splitPane_1.setEnabled(false);//竖条 不可拖动
splitPane.setLeftComponent(splitPane_1); JPanel panel = new JPanel();
splitPane_1.setLeftComponent(panel);
panel.setLayout(null); JLabel lblid = new JLabel("船只ID");
lblid.setBounds(6, 25, 61, 16);
panel.add(lblid); JLabel label = new JLabel("船只名称");
label.setBounds(6, 70, 61, 16);
panel.add(label); JLabel label_1 = new JLabel("到达时间");
label_1.setBounds(6, 115, 61, 16);
panel.add(label_1); JLabel label_2 = new JLabel("离开时间");
label_2.setBounds(6, 160, 61, 16);
panel.add(label_2); JLabel label_3 = new JLabel("停靠偏好");
label_3.setBounds(6, 205, 61, 16);
panel.add(label_3); JTextField textField = new JTextField();
textField.setBounds(80, 20, 200, 26);
panel.add(textField);
textField.setColumns(10); JTextField textField_1 = new JTextField();
textField_1.setBounds(80, 65, 200, 26);
panel.add(textField_1);
textField_1.setColumns(10); JTextField textField_2 = new JTextField();
textField_2.setBounds(80, 110, 200, 26);
panel.add(textField_2);
textField_2.setColumns(10); JTextField textField_3 = new JTextField();
textField_3.setBounds(80, 155, 200, 26);
panel.add(textField_3);
textField_3.setColumns(10); JTextField textField_4 = new JTextField();
textField_4.setBounds(80, 200, 200, 26);
panel.add(textField_4);
textField_4.setColumns(10); JTextPane textPane = new JTextPane();
textPane.setText("提示:\n1、在查询时,ID文本框为空查询的是全部数据\n\t输入ID时查询的时一条数据 \n\n2、输入时间格式:2019-06-08 01:12:11");
textPane.setBounds(6, 238, 270, 100);
panel.add(textPane); JScrollPane scrollPane = new JScrollPane();
splitPane_1.setRightComponent(scrollPane); JPanel panel_2 = new JPanel();
splitPane.setRightComponent(panel_2); JButton btnNewButton = new JButton("船只添加");
panel_2.add(btnNewButton); JButton btnNewButton_1 = new JButton("船只删除");
panel_2.add(btnNewButton_1); JButton btnNewButton_2 = new JButton("船只修改");
panel_2.add(btnNewButton_2); JButton btnNewButton_3 = new JButton("船只查询");
panel_2.add(btnNewButton_3); JButton btnNewButton_4 = new JButton("操作帮助");
panel_2.add(btnNewButton_4); btnNewButton.addActionListener(new ActionListener()//添加
{
public void actionPerformed(ActionEvent e4)
{
try{ String id = textField.getText(); // 取得用ID
String name = textField_1.getText(); // 取得用name
String arrive = textField_2.getText(); // 取得用arrive_time
String leave = textField_3.getText(); // 取得用leave_time
String perfer = textField_4.getText(); // 取得偏好 //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddhh:mm:ss[]");
if((id.length()==0)||(name.length()==0)||(arrive.length()==0)||(leave.length()==0)||(perfer.length()==0)){
JOptionPane.showMessageDialog(null,"插入数据为空","插入数据失败",JOptionPane.PLAIN_MESSAGE); }else{
Timestamp ar = java.sql.Timestamp.valueOf(arrive);
Timestamp lv = java.sql.Timestamp.valueOf(leave); String sql1 = "insert into ship values('"+id+"','"+name+"','"+ar+"','"+lv+"','"+perfer+"','')";
boolean tf;
tf=db.insertSQL(sql1);
if (tf){
JOptionPane.showMessageDialog(null,"插入id:"+id+" 泊位:"+name+" 成功","插入数据",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"插入id:"+id+" 泊位:"+name+" 失败","插入数据",JOptionPane.PLAIN_MESSAGE);
}
}
System.out.print("添加");
}catch(Exception e1){
System.out.print("确认添加,出错");
}
}
}
); btnNewButton_1.addActionListener(new ActionListener()//删除
{
public void actionPerformed(ActionEvent e4)
{
try{
String id = textField.getText();// 取得用ID if (id.length()==0){//
JOptionPane.showMessageDialog(null,"输入为空","请输入数据",JOptionPane.PLAIN_MESSAGE);
}else{
String sql3 = "delete from ship where id='"+id+"';";
boolean dl;
dl=db.deleteSQL(sql3);
if (dl){
JOptionPane.showMessageDialog(null,"删除id:"+id+"成功","删除数据",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"删除id:"+id+"失败","删除数据",JOptionPane.PLAIN_MESSAGE);
}
}
System.out.print("面板2 删除");
}catch(Exception e1){
System.out.print("面板2 删除,出错");
}
}
}
);
btnNewButton_2.addActionListener(new ActionListener()//修改
{
public void actionPerformed(ActionEvent e4)
{
try{
String id = textField.getText(); // 取得用ID
String name = textField_1.getText(); // 取得用name
String arrive = textField_2.getText(); // 取得用arrive_time
String leaves = textField_3.getText(); // 取得用leave_time
String perfer = textField_4.getText(); // 取得偏好 System.out.print("id="+id+"name="+name+"arrive="+arrive+"leave"+leaves+"perfer"+perfer); //2012-12-12 01:12:11 if (name.length()!=0){//修改name
System.out.print("--name修改--");
String sql = "update ship set name='"+name+"' where id='"+id+"';";
boolean na;
na=db.updateSQL(sql);
if (na){
JOptionPane.showMessageDialog(null,"更改名字成功","更新数据",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"更改名字失败","更新数据",JOptionPane.PLAIN_MESSAGE);
} }
if (arrive.length()!=0){//修改到达时间
System.out.print("--arrive修改--");
String sql ="update ship set arrive='"+arrive+"' where id='"+id+"';";
db.updateSQL(sql);
}
//为什么不用leave字段! leave字段不能更新数据库
if (leaves.length()!=0){//修改leave时间
System.out.print("--leaves修改--");
String sql ="update ship set leaves='"+leaves+"' where id='"+id+"';";
db.updateSQL(sql);
} if (perfer.length()!=0){//修改偏好位置
System.out.print("--prefer修改--");
String sql = "update ship set perfer='"+perfer+"' where id='"+id+"';";
db.updateSQL(sql);
} System.out.print("面板2 修改");
}catch(Exception e1){
System.out.print("面板2 修改,出错");
}
}
}
);
btnNewButton_3.addActionListener(new ActionListener()//查询按钮
{
public void actionPerformed(ActionEvent e4)
{
try{
String id = textField.getText(); // 取得用ID String[] columnNames = { "Id", "泊位名","到达时间","离开时间","偏好位置","停靠位置"};
String sql2;
if (id.length()==0){
sql2 = "select * from ship";
}else{
sql2 = "select * from ship where id='"+id+"'";
}
ResultSet rs = db.selectSQL(sql2);
rs.last() ; int row = rs.getRow(); rs.beforeFirst();//光标回滚 获取行数 光标回滚
String data[][] =new String[row][6];
row=0;
while(rs.next()){
data[row][0]=rs.getString(1);
data[row][1]=rs.getString(2);
data[row][2]=rs.getString(3);
data[row][3]=rs.getString(4);
data[row][4]=rs.getString(5);
data[row][5]=rs.getString(6);
row++;
}
JTable table = new JTable(data, columnNames);
table.getColumnModel().getColumn(0).setPreferredWidth(30);//设置列宽度比例
table.getColumnModel().getColumn(1).setPreferredWidth(30);
table.getColumnModel().getColumn(2).setPreferredWidth(120);
table.getColumnModel().getColumn(3).setPreferredWidth(120);
table.getColumnModel().getColumn(4).setPreferredWidth(30);
table.getColumnModel().getColumn(5).setPreferredWidth(30);
scrollPane.setViewportView(table);
System.out.println("面板2查询ship"+row+"行,完成查询");
}catch(Exception e1){
System.out.println("面板2查询ship,查询出错");
}
}
}
);
btnNewButton_4.addActionListener(new ActionListener()//帮助
{
public void actionPerformed(ActionEvent e4)
{
try{
JOptionPane.showMessageDialog(null,"在修改数据时 ID不能为空,其他数据可以选填","修改提示",JOptionPane.PLAIN_MESSAGE); System.out.print("面板2 帮助");
}catch(Exception e1){
System.out.print("面板2 帮助,出错");
}
}
}
); this.addComponentListener(new ComponentAdapter() {//拖动窗口监听
public void componentResized(ComponentEvent e) {
int width=MainUI.frame.getWidth(); //获取窗口宽度
int height=MainUI.frame.getHeight(); //获取窗口高度
splitPane.setBounds(0, 0, width-20, height);
splitPane.setDividerLocation(height-140);
}
}); } }
Pane3效果图:实现对船只的自动指定和手动指定。
Pane3 源码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextField; import consql.Dao;
import tool.Appoint; public class Pane3 extends JPanel{ private static final long serialVersionUID = 1L;
Pane3(){
System.out.println("面板3被调用");
initialize();
} private void initialize() {
Dao db = new Dao();
db.connSQL(); JSplitPane splitPane = new JSplitPane();
splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
splitPane.setDividerLocation(80);//水平条
this.add(splitPane, BorderLayout.CENTER); JSplitPane splitPane_1 = new JSplitPane();
splitPane.setRightComponent(splitPane_1); JPanel panel = new JPanel();
splitPane.setLeftComponent(panel);
panel.setLayout(null); JLabel lblid = new JLabel("船只ID");
lblid.setBounds(6, 19, 61, 16);
panel.add(lblid); JLabel lblid_1 = new JLabel("泊位号");
lblid_1.setBounds(237, 19, 61, 16);
panel.add(lblid_1); JTextField textField = new JTextField();
textField.setBounds(74, 14, 130, 26);
panel.add(textField);
textField.setColumns(10); JTextField textField_1 = new JTextField();
textField_1.setBounds(310, 14, 130, 26);
panel.add(textField_1);
textField_1.setColumns(10); JButton button = new JButton("查询船只");
button.setBounds(6, 58, 102, 29);
panel.add(button); JButton button_1 = new JButton("查询港口");
button_1.setBounds(120, 58, 117, 29);
panel.add(button_1); JButton button_2 = new JButton("手动指定");
button_2.setBounds(247, 58, 117, 29);
panel.add(button_2); JButton button_3 = new JButton("自动指定");
button_3.setBounds(366, 58, 117, 29);
panel.add(button_3); JButton button_4 = new JButton("指定帮助");
button_3.setBounds(366, 58, 117, 29);
panel.add(button_4); JScrollPane scrollPane = new JScrollPane();//添加带滚动条的容器在左下
splitPane_1.setLeftComponent(scrollPane); JScrollPane scrollPane_1 = new JScrollPane();//添加带滚动条的容器在右下
splitPane_1.setRightComponent(scrollPane_1); button.addActionListener(new ActionListener() {//查询船只
public void actionPerformed(ActionEvent e) {
try{
String id = textField.getText(); // 取得用ID String[] columnNames = { "Id", "泊位名","到达时间","离开时间","偏好位置","停靠位置"};
String sql2;
if (id.length()==0){
sql2 = "select * from ship";
}else{
sql2 = "select * from ship where id='"+id+"'";
}
ResultSet rs = db.selectSQL(sql2);
rs.last() ; int row = rs.getRow(); rs.beforeFirst();//光标回滚 获取行数 光标回滚
String data[][] =new String[row][6];
row=0;
while(rs.next()){
data[row][0]=rs.getString(1);
data[row][1]=rs.getString(2);
data[row][2]=rs.getString(3);
data[row][3]=rs.getString(4);
data[row][4]=rs.getString(5);
data[row][5]=rs.getString(6);
row++;
}
JTable table = new JTable(data, columnNames);
table.getColumnModel().getColumn(0).setPreferredWidth(25);//设置列宽度比例
table.getColumnModel().getColumn(1).setPreferredWidth(25);
table.getColumnModel().getColumn(2).setPreferredWidth(120);
table.getColumnModel().getColumn(3).setPreferredWidth(120);
table.getColumnModel().getColumn(4).setPreferredWidth(20);
table.getColumnModel().getColumn(5).setPreferredWidth(20);
scrollPane.setViewportView(table); //将表格添加到容器
System.out.println("面板3查询ship"+row+"行,完成查询");
}catch(Exception e1){
System.out.println("面板3查询ship,查询出错");
} }
}); button_1.addActionListener(new ActionListener() {//查询港口
public void actionPerformed(ActionEvent e) {
try{
String id = textField_1.getText(); // 取得用ID String[] columnNames = { "泊位名","泊位号"};
String sql2;
if (id.length()==0){
sql2 = "select * from port";
}else{
sql2 = "select * from ship where id='"+id+"'";
}
ResultSet rs = db.selectSQL(sql2);
rs.last() ; int row = rs.getRow(); rs.beforeFirst();//光标回滚 获取行数 光标回滚
String data[][] =new String[row][2];
row=0;
while(rs.next()){
data[row][0]=rs.getString(2);
int num=rs.getInt(3);
data[row][1]=String.valueOf(num);
row++;
}
JTable table = new JTable(data, columnNames);
scrollPane_1.setViewportView(table); //将表格添加到容器
System.out.println("面板3查询port"+row+"行,完成查询");
}catch(Exception e1){
System.out.println("面板3查询port,查询出错");
} }
});
button_2.addActionListener(new ActionListener()//手动指定
{
public void actionPerformed(ActionEvent e4)
{
String shipid = textField.getText(); // 取得用ID
String portid = textField_1.getText();
if ((shipid.length()==0)||(portid.length()==0)){//
JOptionPane.showMessageDialog(null,"输入为空","请输入ID",JOptionPane.PLAIN_MESSAGE);
}else{
Appoint hand=new Appoint();
boolean tf= hand.human_appoint(shipid, portid);
if (tf){
JOptionPane.showMessageDialog(null,"指定位置:"+shipid+"成功","指定位置",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"指定位置:"+shipid+"失败","指定位置",JOptionPane.PLAIN_MESSAGE);
}
}
}
}
); button_3.addActionListener(new ActionListener()//自动指定
{
public void actionPerformed(ActionEvent e4)
{
String shipid = textField.getText(); // 取得用ID
if (shipid.length()==0){//
JOptionPane.showMessageDialog(null,"输入为空","请输入ID",JOptionPane.PLAIN_MESSAGE);
}else{
Appoint hand=new Appoint();
boolean tf= hand.auto_appoint(shipid);
if (tf){
JOptionPane.showMessageDialog(null,"指定位置:"+shipid+"成功","指定位置",JOptionPane.PLAIN_MESSAGE);
}else{
JOptionPane.showMessageDialog(null,"指定位置:"+shipid+"失败","指定位置",JOptionPane.PLAIN_MESSAGE);
}
}
}
}
); button_4.addActionListener(new ActionListener()//帮助
{
public void actionPerformed(ActionEvent e4)
{ JOptionPane.showMessageDialog(null,"手动指定位置,要输入船只ID和泊位号,手动指定可能导致时间冲突。\n 自动指定输入ID即可 自动指定 不会出现时间冲突","指定位置",JOptionPane.PLAIN_MESSAGE); }
}
); int between=11;
this.addComponentListener(new ComponentAdapter() {//拖动窗口监听
public void componentResized(ComponentEvent e) {
int width=MainUI.frame.getWidth(); //获取窗口宽度
int height=MainUI.frame.getHeight(); //获取窗口高度
splitPane.setBounds(0, 0, width-20, height); lblid.setBounds(width/between*2, 10, width/between, 20);
textField.setBounds(width/between*3, 10, width/between*2, 20);
lblid_1.setBounds(width/between*6, 10, width/between, 20);
textField_1.setBounds(width/between*7, 10, width/between*2, 20); button.setBounds(width/between*1, 40, 60, 20);
button_1.setBounds(width/between*3,40, 60, 20);
button_2.setBounds(width/between*5, 40, 60, 20);
button_3.setBounds(width/between*7, 40, 60, 20);
button_4.setBounds(width/between*9, 40, 60, 20); splitPane_1.setDividerLocation(width/11*7); //垂直条 黄金比例
splitPane.setBounds(0, 0, width-20, height-90);
} }); } }
Pane4 效果图:应用java实现甘特图
Pane4 源码:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.sql.ResultSet;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import consql.Dao;
import tool.DateFormat; public class Pane4 extends JPanel{ private static final long serialVersionUID = 1L;
Pane4(){
System.out.println("面板4被调用");
initialize();
}
private void initialize() {
Dao db = new Dao();
db.connSQL();
DateFormat da=new DateFormat(); JLabel label = new JLabel("起始时间");
label.setBounds(20, 16, 61, 16);
this.add(label); JTextField textField = new JTextField();
textField.setBounds(93, 11, 130, 26);
this.add(textField);
textField.setColumns(10); JLabel label_1 = new JLabel("结束时间");
label_1.setBounds(235, 16, 61, 16);
this.add(label_1); JTextField textField_1 = new JTextField();
textField_1.setBounds(291, 11, 130, 26);
this.add(textField_1);
textField_1.setColumns(10); JButton btnNewButton = new JButton("查询");
btnNewButton.setBounds(423, 11, 50, 29);
this.add(btnNewButton); JButton btn = new JButton("帮助");
btn.setBounds(473, 11, 50, 29);
this.add(btn); JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(17, 60, 404, 185);
this.add(scrollPane); btnNewButton.addActionListener(new ActionListener()//查询
{
public void actionPerformed(ActionEvent e4)
{
JPanel panel = new JPanel();
String text1=textField.getText();
String text2=textField_1.getText();
String min_time=null;
String max_time=null;
int line_height=35; //行高
int star=100; //时段图 左距 try{//绘制 每条港口信息
String min_sql="select min(arrive) from portship;";
String max_sql="select max(leaves) from portship;"; ResultSet rs_min=db.selectSQL(min_sql);
if(rs_min.first()) { //第一行
min_time=rs_min.getString(1);
System.out.println("最小时间"+rs_min.getString(1));
}
ResultSet rs_max=db.selectSQL(max_sql);
if(rs_max.first()) {
max_time=rs_max.getString(1); //第一行
System.out.println("最大时间"+rs_max.getString(1));
} int width=da.dateDiff(min_time, max_time)+star; //绘图窗口宽度 String sql1 = "select * from port";
ResultSet rs1=db.selectSQL(sql1);
rs1.last() ; int portrow = rs1.getRow(); rs1.beforeFirst();//光标回滚 获取行数 光标回滚 panel.setPreferredSize(new Dimension(width, portrow*line_height));//设置宽度显示滚动条
panel.setLayout(null); while(rs1.next()){
String name=rs1.getString(2); //取得数据表里面的 name(泊位名)
int line=rs1.getInt(3); //取得数据表里面的 num_add (行号) 行号用于绘图
JLabel lblOne = new JLabel(name);
lblOne.setForeground(new Color(0, 0, 0));
lblOne.setBounds(18, line*line_height-10, 61, 16); //整体往下移动10的距离
panel.add(lblOne);
} //绘制空的填充 防止查询为空 遗留数据显示
JEditorPane editorPane1 = new JEditorPane();
editorPane1.setEditable(false);
editorPane1.setBackground(new Color(238,238,238));
editorPane1.setBounds(star,line_height-13, width-star, portrow*line_height-13);
panel.add(editorPane1,3); String sql3 = null;
if((text1.length()==0)&&(text2.length()!=0)){//[ ,y] 查询起始到 y时段段
sql3="select * from portship where leaves<='"+text2+"'";
System.out.println("[ ,y]");
textField.setText(min_time);
}else if((text1.length()!=0)&&(text2.length()==0)){//[x,] 查询x到 结束时段段
sql3="select * from portship where arrive>='"+text1+"'";
System.out.println("[x, ]"); textField_1.setText(max_time);
}else if((text1.length()!=0)&&(text2.length()!=0)){//[x,y] 查询x到 y时段段
sql3="select * from portship where arrive>='"+text1+"'and leaves<='"+text2+"'";
System.out.println("[x,y]");
//设置文本框内容
}else if((text1.length()==0)&&(text2.length()==0)){
sql3="select * from portship";
textField.setText(min_time); //设置文本框内容
textField_1.setText(max_time); //设置文本框内容
}
System.out.println("sql "+sql3);
ResultSet rs3=db.selectSQL(sql3); while(rs3.next()){ //绘制甘特图 String artime=rs3.getString(3);
String lvtime=rs3.getString(4);
int port=rs3.getInt(5);
int hour=da.dateDiff(artime, lvtime);//长度
int dwstr=da.dateDiff(min_time, artime); JEditorPane editorPane = new JEditorPane();
editorPane.setEditable(false);
editorPane.setBackground(new Color(0, 191, 255));
editorPane.setBounds(star+dwstr, port*line_height-13, hour, 20);
panel.add(editorPane,3);//放在后面第一层 }
scrollPane.setViewportView(panel);//绘制完成再添加,不然就会不显示
}catch(Exception sss){
System.out.println("查询港口名Sql出错");
}
}
}
); btn.addActionListener(new ActionListener()//帮助监听
{
public void actionPerformed(ActionEvent e4)
{
JOptionPane.showMessageDialog(null,"无输入查询 [min,max]\n输入起始时间查询 [ x , max]\n输入结束时间查询 [min, y ]\n输入起始和结束时间查询 [ x , y ]\n","指定位置",JOptionPane.PLAIN_MESSAGE);
}
}
); int between=15;
this.addComponentListener(new ComponentAdapter() {//拖动窗口监听
public void componentResized(ComponentEvent e) {
int width=MainUI.frame.getWidth(); //获取窗口宽度
int height=MainUI.frame.getHeight(); //获取窗口高度
scrollPane.setBounds(0, 40, width-23, height-140); label.setBounds(width/between*1, 10, width/between, 20);
textField.setBounds(width/between*2, 10, width/between*3, 20);
label_1.setBounds(width/between*5, 10, width/between, 20);
textField_1.setBounds(width/between*6, 10, width/between*3, 20);
btnNewButton.setBounds(width/between*9, 10, width/between*2, 20);
btn.setBounds(width/between*11, 10, width/between*2, 20); }
}); } }
界面部分介绍完成,接下来介绍工具类 JavaSwing 船只停靠管理可视化(四)
JavaSwing 船只停靠管理可视化(三)的更多相关文章
- JavaSwing 船只停靠管理可视化(五)
JavaSwing 船只停靠管理可视化(一) JavaSwing 船只停靠管理可视化(二) JavaSwing 船只停靠管理可视化(三) JavaSwing 船只停靠管理可视化(四) JavaSwin ...
- JavaSwing 船只停靠管理可视化(四)
JavaSwing 船只停靠管理可视化(一) JavaSwing 船只停靠管理可视化(二) JavaSwing 船只停靠管理可视化(三) JavaSwing 船只停靠管理可视化(四) JavaSwin ...
- JavaSwing 船只停靠管理可视化(二)
JavaSwing 船只停靠管理可视化(一) JavaSwing 船只停靠管理可视化(二) JavaSwing 船只停靠管理可视化(三) JavaSwing 船只停靠管理可视化(四) JavaSwin ...
- JavaSwing 船只停靠管理可视化(一)
最近抽空闲时间做了船只停靠管理系统,先看一下效果. 停靠泊位管理:实现泊位的 增删改查. JavaSwing 船只停靠管理可视化(一) JavaSwing 船只停靠管理可视化(二) JavaSwing ...
- 使用Visual Studio Team Services敏捷规划和项目组合管理(三)——使用Kanban板
使用Visual Studio Team Services敏捷规划和项目组合管理(三)--使用Kanban板 1.要查看Kanban板,请单击Work>Backlogs页面上的Board 链接. ...
- Java-Swing常用布局管理器
http://www.cnblogs.com/hthuang/p/3460234.html 5.Java-Swing常用布局管理器 应用布局管理器都属于相对布局,各组件位置可随界面大小 ...
- dock停靠管理器
DockManager停靠管理器可以对它所拥有的 停靠面板 的行为和外观设置进行集中控制.DockPanel停靠面板是停靠应用程序的主要构成部件. 常规面板 DockPanel.ParentPanel ...
- Android线程管理(三)——Thread类的内部原理、休眠及唤醒
线程通信.ActivityThread及Thread类是理解Android线程管理的关键. 线程,作为CPU调度资源的基本单位,在Android等针对嵌入式设备的操作系统中,有着非常重要和基础的作用. ...
- linux磁盘管理系列三:LVM的使用
磁盘管理系列 linux磁盘管理系列一:磁盘配额管理 http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...
随机推荐
- mySQL初学者需要掌握的【数据库与表的基本操作】
本内容会持续更新的哦! 注:"字段"="列","记录''="行" 文章目录 一:数据库的基本操作 二.数据表的基本操作 1.创建与 ...
- PyQt(Python+Qt)学习随笔:QListWidget的访问当前项的currentItem和setCurrentItem方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 currentItem方法返回列表部件当前选择的项,setCurrentItem方法用于设置当前项. ...
- Nmap学习使用指南
本博客严重参考 Nmap使用指南1.0: https://github.com/scanfsec/penetration/blob/master/Nmap%E4%BD%BF%E7%94%A8%E6%8 ...
- 一种不错的 BFF Microservice GraphQL/REST API 层的开发方式
云原生(Cloud Native)Node JS Express Reactive 微服务模板 (REST/GraphQL) 这个项目提供了完整的基于 Node JS / Typescript 的微服 ...
- 原生js之事件解绑
#removeEventListener ##html <button id='btn'>click</button> ##js ###第一种方式(错误方式) var btn ...
- 手写线程池,对照学习ThreadPoolExecutor线程池实现原理!
作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...
- 初中的一些OI琐屑 & APIO2020 & NOI2020
这篇文章会发布在我的博客上 https://www.cnblogs.com/dmoransky/(一个小习惯,把信息学竞赛的学习历程记录在个人博客中). 借这篇随笔回顾并简短总结一下我的初中OI(信息 ...
- TMOOC-1709-小明复仇
题目描述 小明所在的世界上一共有n个城市,城市间有m条双向道路.小明现在在城市1,他想到位于城市n的小韩隆家询问他为什么没有将自己的五三复原完成.由于小韩隆手下有许多小弟,小明担心自己可能再也回不来, ...
- 数据结构与算法——循环链表的算法实现(Joseph 问题)
Joseph 问题: 如果有10 个人,按编号顺序1,2,...,10 顺时针方向围成一圈.从1 号开始顺时针方向1,2,...,9 报数,凡报数9 者出列(显然,第一个出圈为编号9 者). 最后一个 ...
- 【Django 局域网配置】
默认方法启动django python manage.py runserver 这时启动的服务只能在本机访问,这是因为服务只向本机(127.0.0.1:8000)提供,所以局域网的其他机器不能访问. ...