package gui;
/**
* ClassName:DateChooser
* Copyright: copyright (c)2012
* @author Deng Zhiguang
* http://zgdeng.iteye.com
* @Date 2012-2-7
* Modification History:
* Date Author Version Reason
* ------------------------------------------
*/
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Stroke;
import java.awt.Toolkit;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.SwingUtilities;
import javax.swing.event.AncestorEvent;
import javax.swing.event.AncestorListener;
/**
* 日期选择器,可以指定日期的显示格式
*/
public class DateChooser extends JPanel {
private static final long serialVersionUID = 4529266044762990227L;
private Date initDate;
private Calendar now = Calendar.getInstance();
private Calendar select;
private JPanel monthPanel;//月历
private JP1 jp1;//四块面板,组成
private JP2 jp2;
private JP3 jp3;
private JP4 jp4;
private Font font = new Font("宋体", Font.PLAIN, 12);
private final LabelManager lm = new LabelManager();
private SimpleDateFormat sdf;
private boolean isShow = false;
private Popup pop;
private JComponent showDate;
public static DateChooser getInstance() {
return new DateChooser();
}
public static DateChooser getInstance(Date date) {
return new DateChooser(date);
}
public static DateChooser getInstance(String format) {
return new DateChooser(format);
}
public static DateChooser getInstance(Date date, String format) {
return new DateChooser(date, format);
}
/**
* Creates a new instance of DateChooser
*/
private DateChooser() {
this(new Date());
}
private DateChooser(Date date) {
this(date, "yyyy年MM月dd日");
}
private DateChooser(String format) {
this(new Date(), format);
}
private DateChooser(Date date, String format) {
initDate = date;
sdf = new SimpleDateFormat(format);
select = Calendar.getInstance();
select.setTime(initDate);
initPanel();
}
/**
* 是否允许用户选择
*/
public void setEnabled(boolean b) {
super.setEnabled(b);
showDate.setEnabled(b);
}
/**
*得到当前选择框的日期
*/
public Date getDate() {
return select.getTime();
}
public String getStrDate() {
return sdf.format(select.getTime());
}
public String getStrDate(String format) {
sdf = new SimpleDateFormat(format);
return sdf.format(select.getTime());
}
//根据初始化的日期,初始化面板
private void initPanel() {
monthPanel = new JPanel(new BorderLayout());
monthPanel.setBorder(BorderFactory.createLineBorder(Color.BLUE));
JPanel up = new JPanel(new BorderLayout());
up.add(jp1 = new JP1(), BorderLayout.NORTH);
up.add(jp2 = new JP2(), BorderLayout.CENTER);
monthPanel.add(jp3 = new JP3(), BorderLayout.CENTER);
monthPanel.add(up, BorderLayout.NORTH);
monthPanel.add(jp4 = new JP4(), BorderLayout.SOUTH);
this.addAncestorListener(new AncestorListener() {
public void ancestorAdded(AncestorEvent event) {
}
public void ancestorRemoved(AncestorEvent event) {
}
//只要祖先组件一移动,马上就让popup消失
public void ancestorMoved(AncestorEvent event) {
hidePanel();
}
});
}
public void register(final JComponent showDate) {
this.showDate = showDate;
showDate.setRequestFocusEnabled(true);
showDate.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
showDate.requestFocusInWindow();
}
});
this.setBackground(Color.WHITE);
this.add(showDate, BorderLayout.CENTER);
this.setPreferredSize(new Dimension(90, 25));
this.setBorder(BorderFactory.createLineBorder(Color.GRAY));
showDate.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setCursor(new Cursor(Cursor.HAND_CURSOR));
showDate.setForeground(Color.RED);
}
}
public void mouseExited(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
showDate.setForeground(Color.BLACK);
}
}
public void mousePressed(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setForeground(Color.CYAN);
if (isShow) {
hidePanel();
} else {
showPanel(showDate);
}
}
}
public void mouseReleased(MouseEvent me) {
if (showDate.isEnabled()) {
showDate.setForeground(Color.BLACK);
}
}
});
showDate.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent e) {
hidePanel();
}
public void focusGained(FocusEvent e) {
}
});
}
//根据新的日期刷新
private void refresh() {
jp1.updateDate();
jp2.updateDate();
jp3.updateDate();
jp4.updateDate();
SwingUtilities.updateComponentTreeUI(this);
}
//提交日期
private void commit() {
//TODO add other components here
if (showDate instanceof JTextField) {
((JTextField) showDate).setText(sdf.format(select.getTime()));
}else if (showDate instanceof JLabel) {
((JLabel) showDate).setText(sdf.format(select.getTime()));
}
hidePanel();
}
//隐藏日期选择面板
private void hidePanel() {
if (pop != null) {
isShow = false;
pop.hide();
pop = null;
}
}
//显示日期选择面板
private void showPanel(Component owner) {
if (pop != null) {
pop.hide();
}
Point show = new Point(0, showDate.getHeight());
SwingUtilities.convertPointToScreen(show, showDate);
Dimension size = Toolkit.getDefaultToolkit().getScreenSize();
int x = show.x;
int y = show.y;
if (x < 0) {
x = 0;
}
if (x > size.width - 295) {
x = size.width - 295;
}
if (y < size.height - 170) {
} else {
y -= 188;
}
pop = PopupFactory.getSharedInstance().getPopup(owner, monthPanel, x, y);
pop.show();
isShow = true;
}
/**
* 最上面的面板用来显示月份的增减
*/
private class JP1 extends JPanel {
private static final long serialVersionUID = -5638853772805561174L;
JLabel yearleft, yearright, monthleft, monthright, center, centercontainer;
public JP1() {
super(new BorderLayout());
this.setBackground(new Color(160, 185, 215));
initJP1();
}
private void initJP1() {
yearleft = new JLabel(" <<", JLabel.CENTER);
yearleft.setToolTipText("上一年");
yearright = new JLabel(">> ", JLabel.CENTER);
yearright.setToolTipText("下一年");
yearleft.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
yearright.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
monthleft = new JLabel(" <", JLabel.RIGHT);
monthleft.setToolTipText("上一月");
monthright = new JLabel("> ", JLabel.LEFT);
monthright.setToolTipText("下一月");
monthleft.setBorder(BorderFactory.createEmptyBorder(2, 30, 0, 0));
monthright.setBorder(BorderFactory.createEmptyBorder(
《图书进存销系统:基于Java GUI与MySQL的三层架构实现》 图书进存销系统是一种专门用于管理图书入库、库存、销售等业务流程的软件系统。本系统采用Java GUI图形化界面,结合MySQL数据库存储数据,实现了高效、便捷的图书管理功能。以下是关于这个系统的一些关键知识点: 1. **Java GUI**: Java GUI(图形用户界面)是Java编程语言中用于创建用户界面的一种方式。Java提供了丰富的Swing和JavaFX库,使得开发者能够构建出功能强大、交互性良好的桌面应用程序。在图书进存销系统中,GUI是用户与系统进行交互的主要途径,包括添加图书、查询库存、处理销售订单等功能,通过按钮、文本框、列表视图等组件,提供直观的操作体验。 2. **MySQL数据库**: MySQL是一款开源的关系型数据库管理系统,广泛应用于各种规模的应用中。在这个系统中,MySQL用于存储图书信息、库存状态、销售记录等核心数据。数据库设计通常包括多个表,如图书表、库存表、销售表等,通过SQL语句实现数据的增删改查,确保数据的安全性和一致性。 3. **三层架构**: 三层架构是一种常见的软件设计模式,将系统分为表示层(用户界面)、业务逻辑层和数据访问层。表示层负责与用户交互,业务逻辑层处理业务规则和计算,数据访问层则负责与数据库的交互。这种架构使得各层之间解耦,便于维护和扩展。在图书进存销系统中,用户在GUI上的操作会通过业务逻辑层调用相应的数据访问方法,实现对数据库的增删改查操作。 4. **日历控件**: 日历控件在系统中可能用于设置图书的出版日期、入库日期或销售日期等。Java Swing库提供了JCalendar等第三方库,可以方便地集成到GUI中,允许用户选择特定日期,提高操作的便利性。 5. **图书管理功能**: 图书进存销系统的核心功能包括: - **入库管理**:记录新到图书的信息,如书名、作者、出版社、ISBN码等,并更新库存状态。 - **库存管理**:显示当前库存的图书数量,支持库存盘点和调整。 - **销售管理**:处理图书销售,记录销售订单,更新库存,生成销售报告。 - **查询功能**:根据书名、作者、出版社等条件快速查找图书,便于库存管理和销售服务。 - **统计分析**:对图书销售数据进行统计,生成各类报表,为决策提供数据支持。 6. **浙师大关联**: "浙师大"可能指的是浙江师范大学,该系统可能是该校课程项目或教学案例,旨在帮助学生学习和实践Java GUI编程、数据库管理和软件系统设计。 图书进存销系统利用Java GUI技术和MySQL数据库,构建了一个完整的三层架构图书管理应用,提供了全面的图书进销存功能,同时展现了良好的用户交互体验和数据管理能力。对于学习和开发类似系统的人员,这是一个很好的参考实例。























































































































- 1
- 2

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- qq_362238132017-05-30挺好的就是中文下载下来乱码了Hmz31922017-06-26关于通过日期查找不能用,是因为数据库中时间类型是datetime,改成date就可以实现通过日期查询Hmz31922017-06-01默认字符集改为utf-8

- 粉丝: 0
- 资源: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- MATLAB实现声发射熵值计算:参数可调的高效M文件程序
- 基于国产MCU的全开源无感FOC风机控制代码解析及其应用
- mdir模型,多模态dir干预
- 基于FPGA的微波炉控制器设计:实现高效灵活的家电控制
- 超声波焊接技术在汽车门板塑焊机中的应用:从源码到硬件加工的全面解析
- 二阶系统中LADRC与NLADRC的Simulink建模及扰动条件下与PID对比分析
- 交通牌识别:基于Matlab的BP神经网络与模板匹配技术实现
- C#实现PLC转Web API服务器框架:集成IoT与高并发特性的工业物联网解决方案
- 基于Vivado的AD9680 FPGA芯片测试程序:Verilog实现1G采样率Lane4 JESD204B接收
- 工控领域OPC转Modbus TCP软件解决方案及其应用
- 基于C#开发的带读码检查功能的标签打印系统及其应用场景
- 三菱Q系列PLC 11轴运动控制项目解析:涵盖PLC程序、触摸屏设计及电气规划
- 信号处理领域中基于EEMD与样本熵的序列信号分解与重构技术
- 基于STM32的物联网智能家居系统:环境监测与智能调控
- MATLAB/Simulink电动助力转向系统(EPS)建模及控制策略实现
- 西门子PLC与托利多称重仪表在新能源物料输送中的RS485通讯及模拟量控制实现


