图书管理系统总结——用户主界面实现(一)
准备就以用户主界面作为例子,记录JAVA Swing编写界面的主要方法。
主界面大致如这个样子,先说说左边的导航面板制作:
中间使用一个JSplitPane将屏幕一份为二,左边为导航面板,右边是实际操作界面。JSplitPane有点坑的地方就是要在界面setVisible(true)生效之后才能生效。也就是说要这么写:
private JSplitPane splitPane = new JSplitPane(); public userMainFrm (User curUser) //构造函数 { //分屏 this.getContentPane().add(splitPane, java.awt.BorderLayout.CENTER); splitPane.add(TutorJp, JSplitPane.LEFT); //放置一个底层容器TutorJP //该干嘛干嘛…… //设置JFrame最大化,要放在setVisible之后才能刷新,否则只执行一次 this.setExtendedState(Frame.MAXIMIZED_BOTH); fillBookType();//初始化下拉框 setVisible(true); splitPane.setDividerLocation(0.25);//设定分割面板的左右比例(这时候就生效了,如果放在setVisible(true)这据之前就不会有效果。 splitPane.setEnabled(false); //设置分隔条禁止拖动 }
左边当然要先加一个底层容器Jpanel,在其上面分别放上四个JinternalFrame划分成四块。每一个JinternalFrame都去掉标题栏和边框(由于分辨率问题,只能去掉它),然后每一个JInternalFrame放置一个带标题的Jpanel.故而其实可以不要JinternalFrame,就像最后一个退出按钮ExitJPL所在的容器一样。
TutorJp.setLayout(gl_TutorJp); //setBounds(100, 100, 762, 1120); //创立三个内窗口 JInternalFrame SearchJIF = new JInternalFrame("\u56FE\u4E66\u67E5\u8BE2\u4E0E\u501F\u9605"); SearchJIF.getContentPane().setFont(new Font("宋体", Font.PLAIN, 35)); BasicInternalFrameUI ui = (BasicInternalFrameUI)SearchJIF.getUI(); ui.setNorthPane(null); SearchJIF.setBorder(BorderFactory.createEmptyBorder()); SearchJIF.setVisible(true);
JInternalFrame ID_JIF = new JInternalFrame("\u4E2A\u4EBA\u4FE1\u606F\u8BBE\u7F6E"); //去边框和标题栏 BasicInternalFrameUI ui_1 = (BasicInternalFrameUI)ID_JIF.getUI(); ui_1.setNorthPane(null); ID_JIF.setBorder(BorderFactory.createEmptyBorder()); ID_JIF.getContentPane().setFont(new Font("宋体", Font.PLAIN, 35)); ID_JIF.setVisible(true);
JInternalFrame RecomJIF = new JInternalFrame("\u63A8\u8350\u4FE1\u606F"); RecomJIF.getContentPane().setFont(new Font("宋体", Font.PLAIN, 35)); //去边框和标题栏 BasicInternalFrameUI RecomUI = (BasicInternalFrameUI)RecomJIF.getUI(); RecomUI.setNorthPane(null); RecomJIF.setBorder(BorderFactory.createEmptyBorder()); JPanel RecommendJP = new JPanel(); RecommendJP.setBorder(new TitledBorder(null, "\u63A8\u8350\u4FE1\u606F", TitledBorder.LEADING, TitledBorder.TOP, new Font("宋体", Font.PLAIN, 35), null));
JPanel ExitJPL = new JPanel();
//使用带标题的边框 ExitJPL.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "\u5B89\u5168\u9000\u51FA\u7CFB\u7EDF", TitledBorder.LEADING, TitledBorder.TOP, new Font("宋体", Font.PLAIN, 35), Color.DARK_GRAY));
当然这个带标题的边框代码是由WindowBuider生成的,在里面选择相应属性就好了。在左边的属性里面若是点击了相应的Jpanel,有一个border选项。
接下来是这次记录的重点——如何插入图片。
不管是Jbutton里面的图片还是用一个JLabel容纳图片都一样。那三张标题栏下面的图片是这样添加的:
//标签 JLabel IDJLB = new JLabel("",SwingConstants.CENTER); IDJLB.setFont(new Font("宋体", Font.PLAIN, 35)); JLabel RecomJLb = new JLabel("",SwingConstants.CENTER); RecomJLb.setBounds(254, 41, 256, 73); RecomJLb.setFont(new Font("宋体", Font.PLAIN, 35)); RecommendJP.add(RecomJLb); JLabel Daily_Op = new JLabel("",SwingConstants.CENTER); Daily_Op.setBounds(247, 43, 264, 91); Daily_Op.setFont(new Font("宋体", Font.PLAIN, 35)); //图片准备 int width = 300,height = 100; //这是图片和JLable的宽度和高度 ImageIcon icon = new ImageIcon(userMainFrm.class.getResource("/res/dayly_op.png")); ImageIcon ID_icon = new ImageIcon(userMainFrm.class.getResource("/res/ID_Info.png")); // ImageIcon Recom_icon = new ImageIcon(userMainFrm.class.getResource("/res/Recommend.png"));// //改变图片大小 icon.setImage(icon.getImage().getScaledInstance(width,height,Image.SCALE_DEFAULT));//80和100为大小 可以自由设置 ID_icon.setImage(ID_icon.getImage().getScaledInstance(width,height,Image.SCALE_DEFAULT)); Recom_icon.setImage(Recom_icon.getImage().getScaledInstance(width,height,Image.SCALE_DEFAULT)); //添加图片 Daily_Op.setIcon(icon); IDJLB.setIcon(ID_icon); RecomJLb.setIcon(Recom_icon);
要注意的是图片路径一定要使用相对路径:
ImageIcon icon = new ImageIcon(userMainFrm.class.getResource("/res/dayly_op.png"));
否则在debug时候可能并不会出现问题,但是一旦打包成可执行jar包,就呵呵了 ,找不到图片。。。
而且可能即使使用了相对路径之后,打包成可执行jar包后报出一个空指针错误,这个时候可能是图片的数据流转换成二进制流后出错了,我就从新换了一次图片就行 了。
如果是按钮Jbutton 加入图片直接使用WindowBuilder好了,生成如下代码:
JButton BorrowButton = new JButton("\u56FE\u4E66\u501F\u9605"); BorrowButton.setIcon(new ImageIcon(userMainFrm.class.getResource("/manager/image/return_book.png")));
还有另一件像说的,就是关于按钮的相应函数。这个时候用WindowBuilder,右击相应的按钮,选择actionPerformed,选择第一个就好了。出现如下代码:
BorrowButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { borrowActionPerformed(evt);//自己的响应函数 } });
关于那个欢迎那行字,就采取极简单的获取登录时候的时间,判断上下午。要是严谨一点应该搞一个监听,一旦时间由上午变成下午,要刷新。由于时间关系,这些都不是数据库项目的重点,后不管了。
//欢迎标签 DateUtil.getdateWithMinute(date); String welcomeString; if(date.getHour()<12) { welcomeString="上午好,"+this.presentUser.getUserName(); } else { welcomeString="下午好,"+this.presentUser.getUserName(); } JLabel WwlcomeJL = new JLabel(welcomeString); WwlcomeJL.setFont(new Font("华文行楷", Font.PLAIN, 40));
置于获取时间函数,之后再说。。。。