前段时间期末,老师让仿照水果管理系统写一个系统,基于GUI,要在水果管理系统的基础上增添许多的功能,所以我写了一个花店管理系统。增加了退出系统、花的等级、颜色等的功能。
(一)创建项目,实现系统欢迎窗口类的定义
在Eclipse中,创建一个名称为flowertore的Java Project,在项目的src目录下创建一个名称为cn.itcast. flowerstore.view的包,并在包中创建一个继承自JFrame的抽象类AbstractMainFrame,在类中实现了系统欢迎窗口的显示,代码如下:
package cn.itcast.flowerstore.view;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import cn.itcast.flowerstore.tools.GUITools;
/*
* 欢迎界面的抽象类
*/
public abstract class AbstractMainFrame extends JFrame {
//组件
private JLabel titleLabel = new JLabel(new ImageIcon("flower.jpg"));
private JButton btn = new JButton("进入系统");//顾客按钮
private AbstractButton btnPanel;
//构造方法
public AbstractMainFrame() {
//初始化界面操作
this.init();
//添加组件
this.addComponent();
//添加监听器
this.addListener();
}
//初始化操作
private void init () {
this.setTitle ("花店欢迎您");//标题
this.setSize(600, 400); //窗口的大小
GUITools.center(this);//窗口的位置,在屏幕中央显示
GUITools.setTitleImage(this, "title.png");//设置窗口的小图标
this.setResizable(false);//窗口大小固定
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口默认操作
}
//添加组件
private void addComponent() {
//窗体使用的默认的边界布局,北区放入图片
this.add(titleLabel,BorderLayout.NORTH);
//创建JPanel面板对象
JPanel btnPanel = new JPanel ();
//设置面板的布局方式为没有布局管理器
btnPanel.setLayout(null);
//设置按钮的位置与大小
btn.setBounds(240, 20, 120, 50);
//添加按钮到面板中
btnPanel.add(btn);
//添加面板到窗体中
this.add(btnPanel);
}
//添加监听器
private void addListener () {
btn. addActionListener (new ActionListener() {
@Override
public void actionPerformed (ActionEvent e) {
//展示管理员界面
showAdminDialog() ;
}
});
}
//展示管理员界面
public abstract void showAdminDialog();
}
(二)定义主窗口测试类
- 系统欢迎窗口类编写完成之后,可以编写一个测试类来验证其效果和功能。在src下创建一个名称为cn.itcast. flowerstore.test的包,在包中创建一个名称为AbstractMainFrameTest的类,该类继承了抽象类AbstractMainFrame,其实现代码如下:
package cn.itcast.flowerstore.test;
import cn.itcast.flowerstore.view.AbstractMainFrame;
/**
* 主界面的测试类
*/
public class AbstractMainFrameTest extends AbstractMainFrame {
public static void main(String[] args) {
//创建界面并显示
new AbstractMainFrameTest ().setVisible (true) ;
}
@Override
public void showAdminDialog() {
System. out.println("进入管理界面");
}
}
- 在项目的src目录下,创建一个名称为cn.itast.flowerstre.tools的包,在该包中创建一个名称为GUITools的类,类中定义了窗口组件居中的方法以及显示窗口图标的方法,其编写代码如下:
package cn.itcast.flowerstore.tools;
import java.awt.Component;
import java.awt.Toolkit;
import javax.swing.JFrame;
/**
* 工具类
*/
public class GUITools {
//JAVA提供的GUI默认工具类对象
public static Toolkit kit = Toolkit.getDefaultToolkit();
//将指定组件屏幕居中
public static void center (Component c) {
int x = (kit.getScreenSize().width - c.getWidth())/2;
int y = (kit.getScreenSize().height - c.getHeight())/2;
c.setLocation(x,y) ;
}
//为指定窗口设置图标标题
public static void setTitleImage(JFrame frame, String titlelconPath) {
frame.setIconImage(kit.createImage(titlelconPath));
}
}
定义完工具类以后,就可以使用该工具类使欢迎窗口居中
//初始化操作
private void init () {
this.setTitle ("花店欢迎您");//标题
this.setSize(600, 400); //窗口的大小
GUITools.center(this);//窗口的位置,在屏幕中央显示
GUITools.setTitleImage(this, "title.png");//设置窗口的小图标
this.setResizable(false);//窗口大小固定
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口默认操作
}
(三) 定义花店管理窗口类
在cn.itcast. flowerstore.view包中,创建一个 名称为AbstractAdminDialog的类,该类是一个抽象类,继承了JDialog,其实现代码如下:
package cn.itcast.flowerstore.view;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.ScrollPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax. swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import cn.itcast.flowerstore.tools.GUITools;
/**
*管理窗口类
*/
public abstract class AbstractAdminDialog extends JDialog {
//定义界面使用到的组件作为成员变量
private JLabel tableLabel = new JLabel ("鲜花列表");//鲜花列表标题
private JScrollPane tablePane = new JScrollPane();//滚动视口
protected JTable table = new JTable(); //鲜花列表
private JLabel numberLabel = new JLabel ("鲜花编号");//编号标题
private JLabel nameLabel = new JLabel ("