|
|
|
|
@ -1,13 +1,12 @@
|
|
|
|
|
package com.lingnan.supermarket.view;
|
|
|
|
|
import java.awt. *;
|
|
|
|
|
|
|
|
|
|
import java.awt.*;
|
|
|
|
|
import java.awt.datatransfer.Clipboard;
|
|
|
|
|
import java.awt.datatransfer.DataFlavor;
|
|
|
|
|
import java.awt.datatransfer.StringSelection;
|
|
|
|
|
import java.awt.datatransfer.Transferable;
|
|
|
|
|
|
|
|
|
|
import javax.imageio.ImageIO;
|
|
|
|
|
import javax.swing. *;
|
|
|
|
|
|
|
|
|
|
import javax.swing.*;
|
|
|
|
|
import com.lingnan.supermarket.componet.BGPanel;
|
|
|
|
|
import com.lingnan.supermarket.dao.impl.inOrderServiceImpl;
|
|
|
|
|
import com.lingnan.supermarket.dao.impl.outOrderServiceImpl;
|
|
|
|
|
@ -16,161 +15,221 @@ import com.lingnan.supermarket.table.UserTableModel;
|
|
|
|
|
import com.lingnan.supermarket.utils.FontUtil;
|
|
|
|
|
import com.lingnan.supermarket.utils.TimeAndOrder;
|
|
|
|
|
import com.lingnan.supermarket.view.base.BaseView;
|
|
|
|
|
|
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
|
import java.awt.event.ActionListener;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.util.Scanner;
|
|
|
|
|
import java.awt.event.*;
|
|
|
|
|
public class HomeView extends JPanel implements ActionListener
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
private JLabel pan;
|
|
|
|
|
|
|
|
|
|
private static JLabel pan1;
|
|
|
|
|
|
|
|
|
|
private static JLabel pan2;
|
|
|
|
|
|
|
|
|
|
private static JLabel pan3;
|
|
|
|
|
|
|
|
|
|
private JFrame jFrame;
|
|
|
|
|
|
|
|
|
|
private JPanel tplbPanel;
|
|
|
|
|
|
|
|
|
|
private Image bgImage = null;
|
|
|
|
|
|
|
|
|
|
private ImageIcon[] imgs;
|
|
|
|
|
|
|
|
|
|
private static Float allInPrice;
|
|
|
|
|
|
|
|
|
|
private static Float allOutPrice;
|
|
|
|
|
|
|
|
|
|
private JButton refreshBtn;
|
|
|
|
|
|
|
|
|
|
private JPanel priceJPanel;
|
|
|
|
|
|
|
|
|
|
private static String date;
|
|
|
|
|
|
|
|
|
|
private static inOrderServiceImpl inOrderImpl ;
|
|
|
|
|
private static outOrderServiceImpl outOrderImpl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public HomeView(JFrame jFrame) {
|
|
|
|
|
this.setLayout(null);
|
|
|
|
|
this.jFrame = jFrame;
|
|
|
|
|
initView();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void initView() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pan = new JLabel();
|
|
|
|
|
pan.setBounds(0,0, 1280,351);
|
|
|
|
|
|
|
|
|
|
/*tplbPanel.add(pan);*/
|
|
|
|
|
|
|
|
|
|
imgs =new ImageIcon[7];
|
|
|
|
|
for(int i =0;i<7;i++) {
|
|
|
|
|
imgs[i]=new ImageIcon("static\\轮播\\0"+i+".jpg");
|
|
|
|
|
}
|
|
|
|
|
pan.setIcon(imgs[6]);
|
|
|
|
|
Timer timer = new Timer(2500,L);
|
|
|
|
|
timer.start();
|
|
|
|
|
this.add(pan);
|
|
|
|
|
|
|
|
|
|
date= TimeAndOrder.yMdTime();/*获取今天时间*/
|
|
|
|
|
inOrderImpl = new inOrderServiceImpl();
|
|
|
|
|
outOrderImpl = new outOrderServiceImpl();
|
|
|
|
|
|
|
|
|
|
allInPrice=inOrderImpl.TodayInPrice(date);
|
|
|
|
|
allOutPrice=outOrderImpl.TodayOutPrice(date);
|
|
|
|
|
System.out.println("今日allInprice="+allInPrice);
|
|
|
|
|
System.out.println("今日allOutprice="+allOutPrice);
|
|
|
|
|
|
|
|
|
|
pan1 = new JLabel("今日进货总金额:"+allInPrice+"元",new ImageIcon("static\\icon\\money.png"),JLabel.LEFT);
|
|
|
|
|
pan2 = new JLabel("今日收银总金额:"+allOutPrice+"元",new ImageIcon("static\\icon\\income.png"),JLabel.LEFT);
|
|
|
|
|
pan3 = new JLabel("今日被投诉次数:0次",new ImageIcon("static\\icon\\complaints.png"),JLabel.LEFT);
|
|
|
|
|
|
|
|
|
|
pan1.setFont(FontUtil.homeFont);
|
|
|
|
|
pan2.setFont(FontUtil.homeFont);
|
|
|
|
|
pan3.setFont(FontUtil.homeFont);
|
|
|
|
|
|
|
|
|
|
pan1.setBounds(280,300, 600,200);
|
|
|
|
|
pan2.setBounds(280,400, 600,200);
|
|
|
|
|
pan3.setBounds(280,500, 600,200);
|
|
|
|
|
|
|
|
|
|
/* priceJPanel = new JPanel();
|
|
|
|
|
priceJPanel.setBounds(100,200,700,500);*/
|
|
|
|
|
this.add(pan1);
|
|
|
|
|
this.add(pan2);
|
|
|
|
|
this.add(pan3);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
refreshBtn = new JButton(new ImageIcon("static\\icon\\refresh.png"));
|
|
|
|
|
refreshBtn.addActionListener(this);
|
|
|
|
|
refreshBtn.setBounds(1050,700, 40,40);
|
|
|
|
|
this.add(refreshBtn);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
ActionListener L=new ActionListener()
|
|
|
|
|
{
|
|
|
|
|
int index;
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e)
|
|
|
|
|
{
|
|
|
|
|
pan.setIcon(imgs[index]);
|
|
|
|
|
index++;
|
|
|
|
|
if(index==7)
|
|
|
|
|
index=0;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// HomeView类用于构建超市管理系统中首页的视图界面,展示如图片轮播、关键业务数据以及提供数据刷新功能
|
|
|
|
|
public class HomeView extends JPanel implements ActionListener {
|
|
|
|
|
|
|
|
|
|
// 用于展示图片轮播效果的JLabel组件
|
|
|
|
|
private JLabel pan;
|
|
|
|
|
|
|
|
|
|
// 用于显示今日进货总金额相关信息
|
|
|
|
|
private static JLabel pan1;
|
|
|
|
|
|
|
|
|
|
// 用于显示今日收银总金额相关信息
|
|
|
|
|
private static JLabel pan2;
|
|
|
|
|
|
|
|
|
|
// 用于显示今日被投诉次数相关信息
|
|
|
|
|
private static JLabel pan3;
|
|
|
|
|
|
|
|
|
|
private JFrame jFrame;
|
|
|
|
|
|
|
|
|
|
private JPanel tplbPanel;
|
|
|
|
|
|
|
|
|
|
// 用于存储背景图片的Image对象,初始化为null
|
|
|
|
|
private Image bgImage = null;
|
|
|
|
|
|
|
|
|
|
// 定义的ImageIcon数组,用于存储多张图片资源,以实现图片轮播功能
|
|
|
|
|
private ImageIcon[] imgs;
|
|
|
|
|
|
|
|
|
|
// 静态的Float类型变量,记录今日进货的总金额
|
|
|
|
|
private static Float allInPrice;
|
|
|
|
|
|
|
|
|
|
// 静态的Float类型变量,记录今日收银的总金额
|
|
|
|
|
private static Float allOutPrice;
|
|
|
|
|
|
|
|
|
|
// 用于触发刷新操作的按钮组件
|
|
|
|
|
private JButton refreshBtn;
|
|
|
|
|
|
|
|
|
|
private JPanel priceJPanel;
|
|
|
|
|
|
|
|
|
|
// 存储当前日期信息,方便在类内不同方法中按日期查询业务数据
|
|
|
|
|
private static String date;
|
|
|
|
|
|
|
|
|
|
// 是实现进货订单相关业务逻辑的服务层接口的类实例,用于获取进货相关数据
|
|
|
|
|
private static inOrderServiceImpl inOrderImpl;
|
|
|
|
|
|
|
|
|
|
// 用于实现销售订单相关业务逻辑,获取收银相关数据
|
|
|
|
|
private static outOrderServiceImpl outOrderImpl;
|
|
|
|
|
|
|
|
|
|
// 构造函数,用于创建HomeView实例并初始化界面相关组件
|
|
|
|
|
public HomeView(JFrame jFrame) {
|
|
|
|
|
this.setLayout(null); //设置布局为null
|
|
|
|
|
this.jFrame = jFrame; //保存父窗口引用
|
|
|
|
|
initView(); //调用initView方法初始化组件
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 初始化视图界面组件的方法,负责创建、配置各组件并设置其属性、添加组件到面板以及为按钮添加事件监听器等操作,构建首页界面展示效果
|
|
|
|
|
private void initView() {
|
|
|
|
|
|
|
|
|
|
// 创建一个JLabel组件pan,设置其初始位置和大小,用于后续图片轮播展示
|
|
|
|
|
pan = new JLabel();
|
|
|
|
|
pan.setBounds(0, 0, 1280, 351);
|
|
|
|
|
|
|
|
|
|
/*tplbPanel.add(pan);*/
|
|
|
|
|
|
|
|
|
|
// 创建包含7个元素的ImageIcon数组imgs,用于存储图片轮播的图片资源,通过循环从指定路径加载图片文件创建ImageIcon对象
|
|
|
|
|
imgs = new ImageIcon[7];
|
|
|
|
|
for (int i = 0; i < 7; i++) {
|
|
|
|
|
imgs[i] = new ImageIcon("static\\轮播\\0" + i + ".jpg");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 设置图片轮播起始图片
|
|
|
|
|
pan.setIcon(imgs[6]);
|
|
|
|
|
|
|
|
|
|
// 创建一个定时器对象timer,设置时间间隔为2500毫秒(2.5秒),指定事件监听器为L,然后启动定时器实现图片定时轮播
|
|
|
|
|
Timer timer = new Timer(2500, L);
|
|
|
|
|
timer.start();
|
|
|
|
|
|
|
|
|
|
// 将pan这个JLabel组件添加到当前面板中,使其能在界面上显示出来参与图片轮播
|
|
|
|
|
this.add(pan);
|
|
|
|
|
|
|
|
|
|
// 调用TimeAndOrder工具类的yMdTime方法获取当前日期信息
|
|
|
|
|
date = TimeAndOrder.yMdTime();
|
|
|
|
|
|
|
|
|
|
//用于调用其实现的与进货订单相关业务方法获取数据
|
|
|
|
|
inOrderImpl = new inOrderServiceImpl();
|
|
|
|
|
|
|
|
|
|
// 创建outOrderServiceImpl类的实例,用于调用与销售订单相关业务方法获取销售相关数据,如获取今日收银总金额
|
|
|
|
|
outOrderImpl = new outOrderServiceImpl();
|
|
|
|
|
|
|
|
|
|
// 调用inOrderImpl的TodayInPrice方法,传入当前日期date,获取今日进货的总金额,用于界面显示及其他业务逻辑处理
|
|
|
|
|
allInPrice = inOrderImpl.TodayInPrice(date);
|
|
|
|
|
|
|
|
|
|
// 调用outOrderImpl的TodayOutPrice方法,传入date获取今日收银总金额,用于展示销售数据及相关操作
|
|
|
|
|
allOutPrice = outOrderImpl.TodayOutPrice(date);
|
|
|
|
|
|
|
|
|
|
// 在控制台打印今日进货总金额信息,用于调试或简单日志记录
|
|
|
|
|
System.out.println("今日allInprice=" + allInPrice);
|
|
|
|
|
|
|
|
|
|
// 在控制台打印今日收银总金额信息,起到调试或日志记录作用
|
|
|
|
|
System.out.println("今日allOutprice=" + allOutPrice);
|
|
|
|
|
|
|
|
|
|
// 创建一个JLabel组件pan1,设置其显示文本为包含今日进货总金额的内容,并设置图标及文本在图标的左侧显示,用于直观展示进货金额信息
|
|
|
|
|
pan1 = new JLabel("今日进货总金额:" + allInPrice + "元", new ImageIcon("static\\icon\\money.png"), JLabel.LEFT);
|
|
|
|
|
|
|
|
|
|
// 设置pan1这个JLabel组件的字体为通过FontUtil类获取的适用于首页显示的特定字体
|
|
|
|
|
pan1.setFont(FontUtil.homeFont);
|
|
|
|
|
|
|
|
|
|
// 设置pan1在界面中的位置和大小
|
|
|
|
|
pan1.setBounds(280, 300, 600, 200);
|
|
|
|
|
|
|
|
|
|
// 创建JLabel组件pan2,设置其显示文本为包含今日收银总金额的内容,同样设置图标及文本位置,用于展示收银金额信息
|
|
|
|
|
pan2 = new JLabel("今日收银总金额:" + allOutPrice + "元", new ImageIcon("static\\icon\\income.png"), JLabel.LEFT);
|
|
|
|
|
|
|
|
|
|
// 设置pan2的字体为首页特定字体
|
|
|
|
|
pan2.setFont(FontUtil.homeFont);
|
|
|
|
|
|
|
|
|
|
// 设置pan2在界面中的位置和大小
|
|
|
|
|
pan2.setBounds(280, 400, 600, 200);
|
|
|
|
|
|
|
|
|
|
// 创建JLabel组件pan3,设置其显示文本为今日被投诉次数相关内容(初值为0次),设置图标及文本位置,用于展示投诉情况信息
|
|
|
|
|
pan3 = new JLabel("今日被投诉次数:0次", new ImageIcon("static\\icon\\complaints.png"), JLabel.LEFT);
|
|
|
|
|
|
|
|
|
|
// 设置pan3的字体为首页特定字体
|
|
|
|
|
pan3.setFont(FontUtil.homeFont);
|
|
|
|
|
|
|
|
|
|
// 设置pan3在界面中的位置和大小
|
|
|
|
|
pan3.setBounds(280, 500, 600, 200);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*priceJPanel = new JPanel();
|
|
|
|
|
priceJPanel.setBounds(100, 200, 700, 500);*/
|
|
|
|
|
|
|
|
|
|
// 将pan1、pan2、pan3这三个用于显示关键信息的JLabel组件添加到当前面板(HomeView)中,使其在界面上展示出来供用户查看相关业务数据
|
|
|
|
|
this.add(pan1);
|
|
|
|
|
this.add(pan2);
|
|
|
|
|
this.add(pan3);
|
|
|
|
|
|
|
|
|
|
// 创建一个按钮组件refreshBtn,使用指定图标文件创建按钮图标
|
|
|
|
|
refreshBtn = new JButton(new ImageIcon("static\\icon\\refresh.png"));
|
|
|
|
|
|
|
|
|
|
// 为refreshBtn按钮添加点击事件监听器,将点击事件绑定到当前类的actionPerformed方法上
|
|
|
|
|
refreshBtn.addActionListener(this);
|
|
|
|
|
|
|
|
|
|
// 设置refreshBtn按钮在界面中的位置和大小
|
|
|
|
|
refreshBtn.setBounds(1050, 700, 40, 40);
|
|
|
|
|
|
|
|
|
|
// 将refreshBtn按钮添加到当前面板(HomeView)中
|
|
|
|
|
this.add(refreshBtn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 定义一个实现了ActionListener接口的匿名内部类L,用于处理定时器触发的事件,实现图片在pan这个JLabel组件上的定时切换展示,达到图片轮播效果
|
|
|
|
|
ActionListener L = new ActionListener() {
|
|
|
|
|
int index; // 定义变量index,用于记录当前要显示图片在imgs数组中的索引位置,初始默认为0
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
// 将pan这个JLabel组件的图标设置为imgs数组中当前索引index对应的图片,实现图片切换展示效果,定时器触发时更新显示图片
|
|
|
|
|
pan.setIcon(imgs[index]);
|
|
|
|
|
// 将索引值index加1,准备切换到下一张图片
|
|
|
|
|
index++;
|
|
|
|
|
// 判断索引值是否达到imgs数组长度7,若达到则重置为0,实现图片循环轮播
|
|
|
|
|
if (index == 7)
|
|
|
|
|
index = 0;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 定义静态方法refreshHome,用于刷新首页界面上显示的关键数据(进货、收银金额等)
|
|
|
|
|
public static void refreshHome() {
|
|
|
|
|
|
|
|
|
|
date= TimeAndOrder.yMdTime();/*获取今天时间*/
|
|
|
|
|
|
|
|
|
|
allInPrice=inOrderImpl.TodayInPrice(date);
|
|
|
|
|
allOutPrice=outOrderImpl.TodayOutPrice(date);
|
|
|
|
|
System.out.println("今日allInprice="+allInPrice);
|
|
|
|
|
System.out.println("今日allOutprice="+allOutPrice);
|
|
|
|
|
|
|
|
|
|
pan1.setText("今日进货总金额:"+allInPrice+"元");
|
|
|
|
|
pan2.setText("今日收银总金额:"+allOutPrice+"元");
|
|
|
|
|
pan3.setText("今日被投诉次数:0次");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* priceJPanel = new JPanel();
|
|
|
|
|
priceJPanel.setBounds(100,200,700,500);*/
|
|
|
|
|
/* this.add(pan1);
|
|
|
|
|
this.add(pan2);
|
|
|
|
|
this.add(pan3);*/
|
|
|
|
|
// 再次调用TimeAndOrder工具类的yMdTime方法获取当前最新日期信息
|
|
|
|
|
date = TimeAndOrder.yMdTime();
|
|
|
|
|
|
|
|
|
|
// 调用inOrderImpl的TodayInPrice方法,传入最新日期date,重新获取今日进货总金额并更新allInPrice变量的值
|
|
|
|
|
allInPrice = inOrderImpl.TodayInPrice(date);
|
|
|
|
|
|
|
|
|
|
// 调用outOrderImpl的TodayOutPrice方法,传入date重新获取今日收银总金额并更新allOutPrice变量的值
|
|
|
|
|
allOutPrice = outOrderImpl.TodayOutPrice(date);
|
|
|
|
|
|
|
|
|
|
// 在控制台打印更新后的今日进货总金额信息
|
|
|
|
|
System.out.println("今日allInPrice=" + allInPrice);
|
|
|
|
|
|
|
|
|
|
// 在控制台打印更新后的今日收银总金额信息
|
|
|
|
|
System.out.println("今日allOutPrice=" + allOutPrice);
|
|
|
|
|
|
|
|
|
|
// 更新pan1这个JLabel组件的文本内容,显示最新的进货总金额信息,实现界面数据实时刷新
|
|
|
|
|
pan1.setText("今日进货总金额:" + allInPrice + "元");
|
|
|
|
|
|
|
|
|
|
// 更新pan2的文本内容,显示最新的收银总金额信息,保证销售数据在界面上及时更新展示
|
|
|
|
|
pan2.setText("今日收银总金额:" + allOutPrice + "元");
|
|
|
|
|
|
|
|
|
|
// 更新pan3的文本内容,开始显示0次投诉
|
|
|
|
|
pan3.setText("今日被投诉次数:0次");
|
|
|
|
|
|
|
|
|
|
/*priceJPanel = new JPanel();
|
|
|
|
|
priceJPanel.setBounds(100, 200, 700, 500);*/
|
|
|
|
|
|
|
|
|
|
/*this.add(pan1);
|
|
|
|
|
this.add(pan2);
|
|
|
|
|
this.add(pan3);*/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 实现ActionListener接口的actionPerformed方法
|
|
|
|
|
@Override
|
|
|
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
// 获取触发被点击的按钮
|
|
|
|
|
Object source = e.getSource();
|
|
|
|
|
if(source==refreshBtn) {
|
|
|
|
|
if (source == refreshBtn) {
|
|
|
|
|
// 如果点击的是refreshBtn按钮,创建一个新的HomeView实例
|
|
|
|
|
new HomeView(jFrame);
|
|
|
|
|
// 调用refreshHome方法,刷新首页界面上显示的关键数据,更新界面展示内容
|
|
|
|
|
refreshHome();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|