1.5 主窗体设计
主窗体界面也是该系统的欢迎界面。应用程序的主窗体必须设计层次清晰的系统菜单和工具栏,其中系统菜单包含系统中所有功能的菜单项,而工具栏主要提供常用功能的快捷访问按钮。企业进销存管理系统采用导航面板,综合了系统菜单和工具栏的优点,而且其界面更加美观,操作更快捷。主窗体的运行效果如图1.20所示。
1.5.1 创建主窗体
创建主窗体的步骤如下:
(1)创建JXCFrame类,在类中创建并初始化窗体对象,为窗体添加桌面面板,并设置背景图片。关键代码如下:
例程01 代码位置:光盘\TM\01\JXCManager\src\com\lzw\JXCFrame.java
private JDesktopPane desktopPane;
private JFrame frame;
private JLabel backLabel;
private Preferences preferences;
//创建窗体的Map类型集合对象
private Map<String, JInternalFrame> ifs = new HashMap<String, JInternalFrame>();
public JXCFrame() {
frame = new JFrame("企业进销存管理系统"); //创建窗体对象
frame.addComponentListener(new FrameListener()); //添加窗体事件监听器
frame.getContentPane().setLayout(new BorderLayout()); //设置布局管理器
frame.setBounds(100, 100, 800, 600); //设置窗体位置和大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置窗体默认的关闭方式
backLabel = new JLabel(); //背景标签
backLabel.setVerticalAlignment(SwingConstants.TOP); //设置背景标签垂直对齐方式
backLabel.setHorizontalAlignment(SwingConstants.CENTER); //设置背景标签水平对齐方式
updateBackImage(); //调用初始化背景标签的方法
desktopPane = new JDesktopPane(); //创建桌面面板
desktopPane.add(backLabel, new Integer(Integer.MIN_VALUE)); //将背景标签添加到桌面面板中
frame.getContentPane().add(desktopPane); //添加桌面面板到窗体中
JTabbedPane navigationPanel = createNavigationPanel(); //创建导航面板
frame.getContentPane().add(navigationPanel, BorderLayout.NORTH); //添加导航面板到窗体中
frame.setVisible(true); //显示窗体
}
(2)编写updateBackImage()方法,在该方法中初始化背景标签,背景标签使用HTML超文本语言设置了主窗体的背景图片,该图片将随主窗体的大小自动缩放。关键代码如下:
例程02 代码位置:光盘\TM\01\JXCManager\src\com\lzw\JXCFrame.java
private void updateBackImage() {
if (backLabel != null) {
int backw = JXCFrame.this.frame.getWidth();
int backh = frame.getHeight();
backLabel.setSize(backw, backh); //初始化背景标签的大小
backLabel.setText("<html><body><image width='" + backw
+ "' height='" + (backh - 110) + "' src="
+ JXCFrame.this.getClass().getResource("welcome.jpg")
+ "'></img></body></html>"); //设置背景标签的图像
}
}
(3)在类的静态代码段中设置进销存管理系统的外观样式。Swing支持跨平台特性,它可以在不同的操作系统中保持一致的外观风格,但是本系统使用UIManager类的setLookAndFeel()方法设置程序界面使用本地外观,这样可以使程序更像本地应用程序。关键代码如下:
例程03 代码位置:光盘\TM\01\JXCManager\src\com\lzw\JXCFrame.java
static {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
}
(4)编写主窗体的main()入口方法,在该方法中创建登录窗体对象,登录窗体会验证登录信息,并显示主窗体界面。关键代码如下:
例程04 代码位置:光盘\TM\01\JXCManager\src\com\lzw\JXCFrame.java
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Login();
}
});
}
1.5.2 创建导航面板
创建导航面板的步骤如下:
(1)在JXCFrame类中编写createNavigationPanel()方法,在该方法中创建JTabbedPane选项卡面板对象;为突出选项卡的立体效果,设置其使用BevelBorder边框效果;然后依次创建“基础信息管理”、“库存管理”、“销售管理”、“查询统计”、“进货管理”和“系统管理”选项卡。关键代码如下:
例程05 代码位置:光盘\TM\01\JXCManager\src\com\lzw\JXCFrame.java
private JTabbedPane createNavigationPanel() { //创建导航面板的方法
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.setFocusable(false);
tabbedPane.setBackground(new Color(211, 230, 192));
tabbedPane.setBorder(new BevelBorder(BevelBorder.RAISED));
JPanel baseManagePanel = new JPanel(); //“基础信息管理”面板
baseManagePanel.setBackground(new Color(215, 223, 194));
baseManagePanel.setLayout(new BoxLayout(baseManagePanel, BoxLayout.X_AXIS));
baseManagePanel.add(createFrameButton("客户信息管理", "KeHuGuanLi"));
baseManagePanel.add(createFrameButton("商品信息管理", "ShangPinGuanLi"));
baseManagePanel.add(createFrameButton("供应商信息管理", "GysGuanLi"));
JPanel depotManagePanel = new JPanel(); //“库存管理”面板
depotManagePanel.setBackground(new Color(215, 223, 194));
depotManagePanel.setLayout(new BoxLayout(depotManagePanel, BoxLayout.X_AXIS));
depotManagePanel.add(createFrameButton("库存盘点", "KuCunPanDian"));
depotManagePanel.add(createFrameButton("价格调整", "JiaGeTiaoZheng"));
JPanel sellManagePanel = new JPanel(); //“销售管理”面板
sellManagePanel.setBackground(new Color(215, 223, 194));
sellManagePanel.setLayout(new BoxLayout(sellManagePanel, BoxLayout.X_AXIS));
sellManagePanel.add(createFrameButton("销售单", "XiaoShouDan"));
sellManagePanel.add(createFrameButton("销售退货", "XiaoShouTuiHuo"));
JPanel searchStatisticPanel = new JPanel(); //“查询统计”面板
searchStatisticPanel.setBounds(0, 0, 600, 41);
searchStatisticPanel.setName("searchStatisticPanel");
searchStatisticPanel.setBackground(new Color(215, 223, 194));
searchStatisticPanel.setLayout(new BoxLayout(searchStatisticPanel, BoxLayout.X_AXIS));
searchStatisticPanel.add(createFrameButton("客户信息查询", "KeHuChaXun"));
searchStatisticPanel.add(createFrameButton("商品信息查询", "ShangPinChaXun"));
searchStatisticPanel.add(createFrameButton("供应商信息查询","GongYingShangChaXun"));
searchStatisticPanel.add(createFrameButton("销售信息查询", "XiaoShouChaXun"));
searchStatisticPanel.add(createFrameButton("销售退货查询","XiaoShouTuiHuoChaXun"));
searchStatisticPanel.add(createFrameButton("入库查询", "RuKuChaXun"));
searchStatisticPanel.add(createFrameButton("入库退货查询", "RuKuTuiHuoChaXun"));
searchStatisticPanel.add(createFrameButton("销售排行", "XiaoShouPaiHang"));
JPanel stockManagePanel = new JPanel(); //“进货管理”面板
stockManagePanel.setBackground(new Color(215, 223, 194));
stockManagePanel.setLayout(new BoxLayout(stockManagePanel, BoxLayout.X_AXIS));
stockManagePanel.add(createFrameButton("进货单", "JinHuoDan"));
stockManagePanel.add(createFrameButton("进货退货", "JinHuoTuiHuo"));
JPanel sysManagePanel = new JPanel(); //“系统管理”面板
sysManagePanel.setBackground(new Color(215, 223, 194));
sysManagePanel.setLayout(new BoxLayout(sysManagePanel, BoxLayout.X_AXIS));
sysManagePanel.add(createFrameButton("操作员管理", "CzyGL"));
sysManagePanel.add(createFrameButton("更改密码", "GengGaiMiMa"));
sysManagePanel.add(createFrameButton("权限管理", "QuanManager"));
//将所有面板添加到导航面板中
tabbedPane.addTab(" 基础信息管理 ", null, baseManagePanel, "基础信息管理");
tabbedPane.addTab(" 进货管理 ", null, stockManagePanel, "进货管理");
tabbedPane.addTab(" 销售管理 ", null, sellManagePanel, "销售管理");
tabbedPane.addTab(" 查询统计 ", null, searchStatisticPanel, "查询统计");
tabbedPane.addTab(" 库存管理 ", null, depotManagePanel, "库存管理");
tabbedPane.addTab(" 系统管理 ", null, sysManagePanel, "系统管理");
return tabbedPane;
}