准备就以用户主界面作为例子,记录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));

置于获取时间函数,之后再说。。。。

 

版权声明:本文为satire原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/satire/p/6839016.html