首页 > 编程 > Java > 正文

Java-JFrame-swing嵌套浏览器的具体步骤

2019-11-26 11:07:15
字体:
来源:转载
供稿:网友

一、使用swing嵌套浏览器要实现的功能:

通过java的swing实现在一个窗体中嵌套一个浏览器,可以在这个浏览器中将另一个项目的内容显示出来,只需要回去另一个项目首页的url即可,这样另一个项目就可以在swing嵌套的浏览器中进行正常的显示了;

二、下面的浏览器工具类中的方法在使用的时候,只需要从另一个项目的服务端获取另一个项目的首页stirng类型的url地址和浏览器左上角要显示的string类型的标题两个参数即可,参数只有url和title两个;

(1)主要步骤:

1、通过以下java代码实现创建浏览器;

2、创建JFrame窗体,对窗体进行基本的设置;
3、设置浏览器显示的定位尺寸,并将浏览器添加到JFrame窗体中去:

非常注意:将浏览器添加到窗体的java代码一定在将浏览器顶部工具栏背景图片添加到窗体的java代码之后,否则浏览器内容显示不出来;

4、设置浏览器顶部工具栏的左侧图标;

5、设置浏览器顶部工具栏的左侧标题文字;

6、设置浏览器顶部工具栏右侧最小化、最大化、关闭等图片以及鼠标的各种事件;

7、为窗体添加一个事件:当窗体的尺寸发生变化时,就会执行方法体中的Java代码;因为窗体的大小是可以变化的;

8、非常重要的是:浏览器工具类中一定要下面的一行代码注释掉,否则其他窗体调用此窗体时,不会弹出此窗体;

// 必须将下行代码注释掉,否则不能够跳转到此窗体 // NativeInterface.runEventPump(); 

(2)浏览器的工具类全部代码如下:

package com;  import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Image; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;  import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JLayeredPane; import javax.swing.JPanel; import javax.swing.JRootPane; import javax.swing.SwingUtilities;  import com.util.ResizeFrame; import com.util.ScreenSize;  import chrriis.common.UIUtils; import chrriis.dj.nativeswing.swtimpl.NativeInterface; import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;  /**  * CS包浏览器,首先访问的是项目首页  *  * @author admin  *  */public class EagleBrowser1 extends JPanel {   private static final long serialVersionUID = 1L;   private JPanel webBrowserPanel;   private JWebBrowser webBrowser;   private JFrame frame;   private Double browserWidth;// 窗体宽度  private Double browserHeight;//窗体高度   public EagleBrowser1() {   }   // 构造方法,传递url和title可创建CS包容浏览器窗体  public EagleBrowser1(String url, String title) {   /**    * 创建浏览器    */  webBrowserPanel = new JPanel(new BorderLayout());   webBrowser = new JWebBrowser();   webBrowser.navigate(url);   webBrowser.setButtonBarVisible(false);   webBrowser.setMenuBarVisible(false);   webBrowser.setBarsVisible(false);   webBrowser.setStatusBarVisible(false);   webBrowserPanel.add(webBrowser, BorderLayout.CENTER);   //add(webBrowserPanel, BorderLayout.CENTER);   // webBrowser.executeJavascript("javascrpit:window.location.href='http://www.baidu.com'");   // webBrowser.executeJavascript("alert('haha')"); //执行Js代码    UIUtils.setPreferredLookAndFeel();   NativeInterface.open();   SwingUtilities.invokeLater(new Runnable() {    public void run() {     frame = new JFrame();     // 去掉窗口的装饰     frame.setUndecorated(true);     // 采用指定的窗口装饰风格     frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);     frame.setLocationByPlatform(true);     frame.setLayout(null);     // 注意可见性、窗体大小、窗体居中定位,这三个最好按照此顺序书写     // 设置窗体可见     frame.setVisible(true);     frame.setResizable(true);     // 设置窗体的宽度、高度     frame.setSize(1600, 900);     // 设置窗体居中显示     frame.setLocationRelativeTo(frame.getOwner());     /**      * 获取窗体的总宽      */    browserWidth = frame.getSize().getWidth();     browserHeight = frame.getSize().getHeight();     /**      * 插入浏览器头部窄条的背景图片      */    // 创建具有分层的JLayeredPane     JLayeredPane layeredPane = new JLayeredPane();     layeredPane.setBounds(0, 0, browserWidth.intValue(), 40);     // 添加分层的JLayeredPane     frame.getContentPane().add(layeredPane,BorderLayout.CENTER);     // 创建图片对象     ImageIcon img = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_head.jpg"));     // 设置图片在窗体中显示的宽度、高度     img.setImage(img.getImage().getScaledInstance(browserWidth.intValue(), 40, Image.SCALE_DEFAULT));      JPanel panel = new JPanel();     panel.setBounds(0, 0, browserWidth.intValue(), 40);     layeredPane.add(panel, JLayeredPane.DEFAULT_LAYER);      JLabel lblNewLabel = new JLabel("");     panel.add(lblNewLabel);     lblNewLabel.setIcon(img);     /**      * 将网页添加到窗体frame中来      */    //设置浏览器距离头部的距离高度     webBrowserPanel.setBounds(0, 29, browserWidth.intValue(), browserHeight.intValue()-29);     // 添加网页的JPanel,注意:定要将此行代码放置在添加JLayeredPane以下     frame.getContentPane().add(webBrowserPanel, BorderLayout.CENTER);     /**      * 插入浏览器头部左边的图片      */    // 创建图片对象     ImageIcon headLeftImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_head_left.jpg"));     // 设置图片在窗体中显示的宽度、高度     headLeftImg.setImage(headLeftImg.getImage().getScaledInstance(24, 40, Image.SCALE_DEFAULT));      JPanel headLeftPanel = new JPanel();     headLeftPanel.setBounds(0, -5, 24, 40);     layeredPane.add(headLeftPanel, JLayeredPane.MODAL_LAYER);      JLabel headLeftLabel = new JLabel("");     headLeftPanel.add(headLeftLabel);     headLeftLabel.setIcon(headLeftImg);     /**      * 插入浏览器窗体左边的标题      */    JPanel titlePanel = new JPanel();     titlePanel.setBounds(32, 6, browserWidth.intValue()-150, 20);     layeredPane.add(titlePanel, JLayeredPane.MODAL_LAYER);     //设置JPanel中文字对齐方式为左对齐     titlePanel.setLayout(new FlowLayout(FlowLayout.LEFT));     //设置JPanel为透明的,这样可以让JPanel后面的背景颜色显示出来     titlePanel.setBackground(null);     titlePanel.setOpaque(false);          JLabel titleLbel = new JLabel();     titleLbel.setText(title);     titleLbel.setSize(100, 20);     titleLbel.setHorizontalAlignment(JLabel.LEFT);     titleLbel.setFont(new Font("微软雅黑", 0, 12));     titleLbel.setForeground(Color.white);     titlePanel.add(titleLbel);     /**      * 插入右边关闭背景图片及功能      */    // 创建图片对象     ImageIcon headCloseImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_close_01.jpg"));     // 设置图片在窗体中显示的宽度、高度     headCloseImg.setImage(headCloseImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));      JPanel headClosePanel = new JPanel();     headClosePanel.setBounds(browserWidth.intValue() - 40, -5, 40, 40);     layeredPane.add(headClosePanel, JLayeredPane.MODAL_LAYER);      JLabel headCloseLabel = new JLabel("");     headClosePanel.add(headCloseLabel);     headCloseLabel.setIcon(headCloseImg);     headCloseLabel.addMouseListener(new MouseAdapter() {      // 鼠标点击关闭图片,实现关闭窗体的功能      @Override     public void mouseClicked(MouseEvent e) {       frame.dispose();       // System.exit(0);//使用dispose();也可以关闭只是不是真正的关闭      }       // 鼠标进入,换关闭的背景图片      @Override     public void mouseEntered(MouseEvent e) {       // 创建图片对象       ImageIcon closeImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_close_02.jpg"));       // 设置图片在窗体中显示的宽度、高度       closeImg1.setImage(closeImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));       headCloseLabel.setIcon(closeImg1);      }       // 鼠标离开,换关闭的背景图片      @Override     public void mouseExited(MouseEvent e) {       // 创建图片对象       ImageIcon headCloseImg = new ImageIcon(         EagleBrowser1.class.getResource("/images/browser_close_01.jpg"));       // 设置图片在窗体中显示的宽度、高度       headCloseImg.setImage(headCloseImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));       headCloseLabel.setIcon(headCloseImg);      }     });     /**      * 插入右边最大化背景图片及功能      */    // 创建图片对象     ImageIcon headMaxImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_01.jpg"));     // 设置图片在窗体中显示的宽度、高度     headMaxImg.setImage(headMaxImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));      JPanel headMaxPanel = new JPanel();     headMaxPanel.setBounds(browserWidth.intValue() - 40 - 40, -5, 40, 40);     layeredPane.add(headMaxPanel, JLayeredPane.MODAL_LAYER);      JLabel headMaxLabel = new JLabel("");     headMaxPanel.add(headMaxLabel);     headMaxLabel.setIcon(headMaxImg);     headMaxLabel.addMouseListener(new MouseAdapter() {      // 鼠标点击关闭图片,实现关闭窗体的功能      @Override     public void mouseClicked(MouseEvent e) {       // 判断窗体当前宽度,如果与计算机分辨率同样宽,那么窗体宽度变为默认值,如果小于计算机分辨率宽度,那么窗体变为最大化显示       if (frame.getSize().getWidth() < ScreenSize.getScreenWidth()) {        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);// 窗体最大化        // 创建图片对象        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_max_01.jpg"));        // 设置图片在窗体中显示的宽度、高度        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));        headMaxLabel.setIcon(maxImg1);       } else {        frame.setSize(1600, 900);        frame.setLocationRelativeTo(frame.getOwner());        // 创建图片对象        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_01.jpg"));        // 设置图片在窗体中显示的宽度、高度        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));        headMaxLabel.setIcon(maxImg1);       }       }       // 鼠标进入,换关闭的背景图片      @Override     public void mouseEntered(MouseEvent e) {       // 判断窗体当前宽度与计算机分辨率宽度大小       if (frame.getSize().getWidth() < ScreenSize.getScreenWidth()) {        //窗体宽度小于计算机分辨率宽度,图片应显示中间那种        // 创建图片对象        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_02.jpg"));        // 设置图片在窗体中显示的宽度、高度        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));        headMaxLabel.setIcon(maxImg1);       }else{        // 创建图片对象        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_max_02.jpg"));        // 设置图片在窗体中显示的宽度、高度        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));        headMaxLabel.setIcon(maxImg1);       }      }       // 鼠标离开,换关闭的背景图片      @Override     public void mouseExited(MouseEvent e) {       // 判断窗体当前宽度与计算机分辨率宽度大小       if (frame.getSize().getWidth() < ScreenSize.getScreenWidth()) {        //窗体宽度小于计算机分辨率宽度,图片应显示中间那种        // 创建图片对象        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_01.jpg"));        // 设置图片在窗体中显示的宽度、高度        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));        headMaxLabel.setIcon(maxImg1);       }else{        // 创建图片对象        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_max_01.jpg"));        // 设置图片在窗体中显示的宽度、高度        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));        headMaxLabel.setIcon(maxImg1);       }      }     });     /**      * 插入右边最小化背景图片及功能      */    // 创建图片对象     ImageIcon headMinImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_min_01.jpg"));     // 设置图片在窗体中显示的宽度、高度     headMinImg.setImage(headMinImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));      JPanel headMinPanel = new JPanel();     headMinPanel.setBounds(browserWidth.intValue() - 40 - 40 - 40, -5, 40, 40);     layeredPane.add(headMinPanel, JLayeredPane.MODAL_LAYER);      JLabel headMinLabel = new JLabel("");     headMinPanel.add(headMinLabel);     headMinLabel.setIcon(headMinImg);     headMinLabel.addMouseListener(new MouseAdapter() {      // 鼠标点击关闭图片,实现关闭窗体的功能      @Override     public void mouseClicked(MouseEvent e) {       frame.setExtendedState(JFrame.ICONIFIED);// 最小化窗体      }       // 鼠标进入,换关闭的背景图片      @Override     public void mouseEntered(MouseEvent e) {       // 创建图片对象       ImageIcon mainImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_min_02.jpg"));       // 设置图片在窗体中显示的宽度、高度       mainImg1.setImage(mainImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));       headMinLabel.setIcon(mainImg1);      }       // 鼠标离开,换关闭的背景图片      @Override     public void mouseExited(MouseEvent e) {       // 创建图片对象       ImageIcon headMinImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_min_01.jpg"));       // 设置图片在窗体中显示的宽度、高度       headMinImg.setImage(headMinImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT));       headMinLabel.setIcon(headMinImg);      }     });     /**      * 设置检测窗体大小发生变化的事件      */    frame.addComponentListener(new ComponentAdapter() {      @Override     public void componentResized(ComponentEvent e) {       /**        * 获取尺寸变化后的窗体的宽度、高度        */      browserWidth = frame.getSize().getWidth();       browserHeight = frame.getSize().getHeight();       /**        * 浏览器顶部窄背景图片宽度改变        */      layeredPane.setBounds(0, -5, browserWidth.intValue(), 34);       titlePanel.setBounds(32, 6, browserWidth.intValue()-150, 20);       // 创建图片对象       ImageIcon img1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_head.jpg"));       // 设置图片在窗体中显示的宽度、高度       img1.setImage(         img1.getImage().getScaledInstance(browserWidth.intValue(), 40, Image.SCALE_DEFAULT));       panel.setBounds(0, -5, browserWidth.intValue(), 40);       panel.add(lblNewLabel);       lblNewLabel.setIcon(img1);       /**        * 浏览器顶部窄条右侧最小化、最大化、关闭按钮图片根据宽度进行定位        */      headClosePanel.setBounds(browserWidth.intValue() - 40, -5, 40, 40);// 浏览器顶部关闭图片定位       headMaxPanel.setBounds(browserWidth.intValue() - 40 - 40, -5, 40, 40);// 浏览器顶部最大化图片定位       headMinPanel.setBounds(browserWidth.intValue() - 40 - 40 - 40, -5, 40, 40);// 浏览器顶部最小化图片定位       /**        * 浏览器宽度、高度进行改变        */      //设置浏览器距离头部的距离高度       webBrowserPanel.setBounds(0, 29, browserWidth.intValue(), browserHeight.intValue()-29);          }     });     }   });   // 必须将下行代码注释掉,否则不能够跳转到此窗体   // NativeInterface.runEventPump();  }   public static void main(String[] args) {   String url = "http://localhost:8080/NativeSwitingTest/user/user_list.html";   String title = "测试CS包浏览器";   EagleBrowser1 eagleBrowser = new EagleBrowser1(url, title);  }  }

上述代码中用到了获取当前计算机尺寸的工具类代码如下:

package com.util;  import java.awt.Dimension; import java.awt.Toolkit; /**  * 获取当前计算机分辨率的工具类  * @author admin  *  */public class ScreenSize {    //获取当前计算机分辨率的宽度  public static Double getScreenWidth(){   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();   return screenSize.getWidth();  }    //获取当前计算机分辨率的高度  public static Double getScreenHeight(){   Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();   return screenSize.getHeight();  }   }

以上这篇Java-JFrame-swing嵌套浏览器的具体步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表