用Java仿金山卫士写的界面(含源码)

总结这一学期学习用java做界面的一些经验,整个界面是在netbeans 6.9下面开发的。

先看界面效果图。

主界面结构图:

这里总结一下用到的技术:

1.有背景的,去掉了默认标题栏的JFrame。

        设置背景,主要是通过在layeredPane中添加一个JLabel作为背景,然后把顶层内容窗格设置成透明实现:

            ImageIcon img = new ImageIcon(getClass().getResource("/images/bluebg.png"));//获得图片资源
            imgLabel.setIcon(img);
            imgLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));//设置JLabel边框
            this.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));// 将图片添加到layeredPane
            imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());
            ((JPanel)getContentPane()).setOpaque(false);// 将contentPane设置成透明的

      去掉默认标题栏(下面这段代码我是写在构造方法里面):

          this.setUndecorated(true); // 去掉窗口的装饰
          this.getRootPane().setWindowDecorationStyle(JRootPane.NONE);

2.可以实现拖动,关闭窗口,最小化窗口的菜单面板

      实现拖动,继承JPanel并加入下面代码,在构造方法里面要加入setDragable();:

     

 private JFrame jFrame;
      Point loc = null;
      Point tmp = null;
      boolean isDragged = false;

    @SuppressWarnings("unchecked")
     private void setDragable() {
        this.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent e) {
               isDragged = false;
               jFrame.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
            }
            public void mousePressed(java.awt.event.MouseEvent e) {
               tmp = new Point(e.getX(), e.getY());
               isDragged = true;
               jFrame.setCursor(new Cursor(Cursor.MOVE_CURSOR));
            }
        });
        this.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent e) {
               if(isDragged) {
                   loc = new Point(jFrame.getLocation().x + e.getX() - tmp.x,
                     jFrame.getLocation().y + e.getY() - tmp.y);
                   jFrame.setLocation(loc);
               }
            }
        });
  }
  }

   实现关闭和最小化代码只要把相应代码加入按钮事件里面就可以:

            关闭窗口代码,有提示是否要关闭:

                    int flag = JOptionPane.showConfirmDialog(null, "Sure to close?",
                        "Care!", JOptionPane.YES_NO_OPTION,
                        JOptionPane.INFORMATION_MESSAGE);
                if(JOptionPane.YES_OPTION == flag){
                    System.exit(0);
                }else{
                    return;
                }

           最小化代码:

            this.setExtendedState(JFrame.ICONIFIED);

3.可以自由切换的半透明JPanel

         半透明效果,继承JPanel,重写paintComponent方法,画一张半透明图片作为背景,并把Jpanel设置成透明,

             protected void paintComponent(Graphics g){
                     super.paintComponent(g);
                      ImageIcon img = new ImageIcon(getClass().getResource("/images/fuzzy.png"));
                      img.paintIcon(this,g,0,0);

                     }

           通过点击menuPanel面板上的四个按钮,切换成不同的面板。原理,mainPanel使用卡片布局(java.awt.CardLayout),并添加四个半透明JPanel,

           通过四个按钮切换面板通过以下代码实现: ((CardLayout)mainPanel.getLayout()).show(mainPanel,"card2");//mainPanel为设置了CardLayout的JPanel,"Card2"为面  

           板的卡片名字,并不是面板的变量名


其他技术要点:

图形按钮:

        setBorderPainted(false);//取消边框显示
        setContentAreaFilled(false);//取消背景填充
        setFocusPainted(false);//取消获得焦点时候描画边框

       setRolloverIcon(); //设置当鼠标滑过时候显示的图标

源码及程序下载:http://download.csdn.net/detail/fycheung/4543026

欢迎交流学习


           




         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值