进销存管理系统(7)

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;

}

 

读书导航