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

时间:2022-09-13 14:30:46

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

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

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

  1. package com; 
  2.   
  3. import java.awt.BorderLayout; 
  4. import java.awt.Color; 
  5. import java.awt.FlowLayout; 
  6. import java.awt.Font; 
  7. import java.awt.Image; 
  8. import java.awt.event.ComponentAdapter; 
  9. import java.awt.event.ComponentEvent; 
  10. import java.awt.event.MouseAdapter; 
  11. import java.awt.event.MouseEvent; 
  12.   
  13. import javax.swing.ImageIcon; 
  14. import javax.swing.JFrame; 
  15. import javax.swing.JLabel; 
  16. import javax.swing.JLayeredPane; 
  17. import javax.swing.JPanel; 
  18. import javax.swing.JRootPane; 
  19. import javax.swing.SwingUtilities; 
  20.   
  21. import com.util.ResizeFrame; 
  22. import com.util.ScreenSize; 
  23.   
  24. import chrriis.common.UIUtils; 
  25. import chrriis.dj.nativeswing.swtimpl.NativeInterface; 
  26. import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser; 
  27.   
  28. /** 
  29.  * CS包浏览器,首先访问的是项目首页 
  30.  * 
  31.  * @author admin 
  32.  * 
  33.  */ 
  34. public class EagleBrowser1 extends JPanel { 
  35.   
  36.  private static final long serialVersionUID = 1L; 
  37.   
  38.  private JPanel webBrowserPanel; 
  39.   
  40.  private JWebBrowser webBrowser; 
  41.   
  42.  private JFrame frame; 
  43.   
  44.  private Double browserWidth;// 窗体宽度 
  45.  private Double browserHeight;//窗体高度 
  46.   
  47.  public EagleBrowser1() { 
  48.   
  49.  } 
  50.   
  51.  // 构造方法,传递url和title可创建CS包容浏览器窗体 
  52.  public EagleBrowser1(String url, String title) { 
  53.   /** 
  54.    * 创建浏览器 
  55.    */ 
  56.   webBrowserPanel = new JPanel(new BorderLayout()); 
  57.   webBrowser = new JWebBrowser(); 
  58.   webBrowser.navigate(url); 
  59.   webBrowser.setButtonBarVisible(false); 
  60.   webBrowser.setMenuBarVisible(false); 
  61.   webBrowser.setBarsVisible(false); 
  62.   webBrowser.setStatusBarVisible(false); 
  63.   webBrowserPanel.add(webBrowser, BorderLayout.CENTER); 
  64.   //add(webBrowserPanel, BorderLayout.CENTER); 
  65.   // webBrowser.executeJavascript("javascrpit:window.location.href='http://www.baidu.com'"); 
  66.   // webBrowser.executeJavascript("alert('haha')"); //执行Js代码 
  67.   
  68.   UIUtils.setPreferredLookAndFeel(); 
  69.   NativeInterface.open(); 
  70.   SwingUtilities.invokeLater(new Runnable() { 
  71.    public void run() { 
  72.     frame = new JFrame(); 
  73.     // 去掉窗口的装饰 
  74.     frame.setUndecorated(true); 
  75.     // 采用指定的窗口装饰风格 
  76.     frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE); 
  77.     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
  78.     frame.setLocationByPlatform(true); 
  79.     frame.setLayout(null); 
  80.     // 注意可见性、窗体大小、窗体居中定位,这三个最好按照此顺序书写 
  81.     // 设置窗体可见 
  82.     frame.setVisible(true); 
  83.     frame.setResizable(true); 
  84.     // 设置窗体的宽度、高度 
  85.     frame.setSize(1600, 900); 
  86.     // 设置窗体居中显示 
  87.     frame.setLocationRelativeTo(frame.getOwner()); 
  88.     /** 
  89.      * 获取窗体的总宽 
  90.      */ 
  91.     browserWidth = frame.getSize().getWidth(); 
  92.     browserHeight = frame.getSize().getHeight(); 
  93.     /** 
  94.      * 插入浏览器头部窄条的背景图片 
  95.      */ 
  96.     // 创建具有分层的JLayeredPane 
  97.     JLayeredPane layeredPane = new JLayeredPane(); 
  98.     layeredPane.setBounds(0, 0, browserWidth.intValue(), 40); 
  99.     // 添加分层的JLayeredPane 
  100.     frame.getContentPane().add(layeredPane,BorderLayout.CENTER); 
  101.     // 创建图片对象 
  102.     ImageIcon img = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_head.jpg")); 
  103.     // 设置图片在窗体中显示的宽度、高度 
  104.     img.setImage(img.getImage().getScaledInstance(browserWidth.intValue(), 40, Image.SCALE_DEFAULT)); 
  105.   
  106.     JPanel panel = new JPanel(); 
  107.     panel.setBounds(0, 0, browserWidth.intValue(), 40); 
  108.     layeredPane.add(panel, JLayeredPane.DEFAULT_LAYER); 
  109.   
  110.     JLabel lblNewLabel = new JLabel(""); 
  111.     panel.add(lblNewLabel); 
  112.     lblNewLabel.setIcon(img); 
  113.     /** 
  114.      * 将网页添加到窗体frame中来 
  115.      */ 
  116.     //设置浏览器距离头部的距离高度 
  117.     webBrowserPanel.setBounds(0, 29, browserWidth.intValue(), browserHeight.intValue()-29); 
  118.     // 添加网页的JPanel,注意:定要将此行代码放置在添加JLayeredPane以下 
  119.     frame.getContentPane().add(webBrowserPanel, BorderLayout.CENTER); 
  120.     /** 
  121.      * 插入浏览器头部左边的图片 
  122.      */ 
  123.     // 创建图片对象 
  124.     ImageIcon headLeftImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_head_left.jpg")); 
  125.     // 设置图片在窗体中显示的宽度、高度 
  126.     headLeftImg.setImage(headLeftImg.getImage().getScaledInstance(24, 40, Image.SCALE_DEFAULT)); 
  127.   
  128.     JPanel headLeftPanel = new JPanel(); 
  129.     headLeftPanel.setBounds(0, -5, 24, 40); 
  130.     layeredPane.add(headLeftPanel, JLayeredPane.MODAL_LAYER); 
  131.   
  132.     JLabel headLeftLabel = new JLabel(""); 
  133.     headLeftPanel.add(headLeftLabel); 
  134.     headLeftLabel.setIcon(headLeftImg); 
  135.     /** 
  136.      * 插入浏览器窗体左边的标题 
  137.      */ 
  138.     JPanel titlePanel = new JPanel(); 
  139.     titlePanel.setBounds(32, 6, browserWidth.intValue()-150, 20); 
  140.     layeredPane.add(titlePanel, JLayeredPane.MODAL_LAYER); 
  141.     //设置JPanel中文字对齐方式为左对齐 
  142.     titlePanel.setLayout(new FlowLayout(FlowLayout.LEFT)); 
  143.     //设置JPanel为透明的,这样可以让JPanel后面的背景颜色显示出来 
  144.     titlePanel.setBackground(null); 
  145.     titlePanel.setOpaque(false); 
  146.       
  147.     JLabel titleLbel = new JLabel(); 
  148.     titleLbel.setText(title); 
  149.     titleLbel.setSize(100, 20); 
  150.     titleLbel.setHorizontalAlignment(JLabel.LEFT); 
  151.     titleLbel.setFont(new Font("微软雅黑", 0, 12)); 
  152.     titleLbel.setForeground(Color.white); 
  153.     titlePanel.add(titleLbel); 
  154.     /** 
  155.      * 插入右边关闭背景图片及功能 
  156.      */ 
  157.     // 创建图片对象 
  158.     ImageIcon headCloseImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_close_01.jpg")); 
  159.     // 设置图片在窗体中显示的宽度、高度 
  160.     headCloseImg.setImage(headCloseImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  161.   
  162.     JPanel headClosePanel = new JPanel(); 
  163.     headClosePanel.setBounds(browserWidth.intValue() - 40, -5, 40, 40); 
  164.     layeredPane.add(headClosePanel, JLayeredPane.MODAL_LAYER); 
  165.   
  166.     JLabel headCloseLabel = new JLabel(""); 
  167.     headClosePanel.add(headCloseLabel); 
  168.     headCloseLabel.setIcon(headCloseImg); 
  169.     headCloseLabel.addMouseListener(new MouseAdapter() { 
  170.      // 鼠标点击关闭图片,实现关闭窗体的功能 
  171.      @Override 
  172.      public void mouseClicked(MouseEvent e) { 
  173.       frame.dispose(); 
  174.       // System.exit(0);//使用dispose();也可以关闭只是不是真正的关闭 
  175.      } 
  176.   
  177.      // 鼠标进入,换关闭的背景图片 
  178.      @Override 
  179.      public void mouseEntered(MouseEvent e) { 
  180.       // 创建图片对象 
  181.       ImageIcon closeImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_close_02.jpg")); 
  182.       // 设置图片在窗体中显示的宽度、高度 
  183.       closeImg1.setImage(closeImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  184.       headCloseLabel.setIcon(closeImg1); 
  185.      } 
  186.   
  187.      // 鼠标离开,换关闭的背景图片 
  188.      @Override 
  189.      public void mouseExited(MouseEvent e) { 
  190.       // 创建图片对象 
  191.       ImageIcon headCloseImg = new ImageIcon( 
  192.         EagleBrowser1.class.getResource("/images/browser_close_01.jpg")); 
  193.       // 设置图片在窗体中显示的宽度、高度 
  194.       headCloseImg.setImage(headCloseImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  195.       headCloseLabel.setIcon(headCloseImg); 
  196.      } 
  197.     }); 
  198.     /** 
  199.      * 插入右边最大化背景图片及功能 
  200.      */ 
  201.     // 创建图片对象 
  202.     ImageIcon headMaxImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_01.jpg")); 
  203.     // 设置图片在窗体中显示的宽度、高度 
  204.     headMaxImg.setImage(headMaxImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  205.   
  206.     JPanel headMaxPanel = new JPanel(); 
  207.     headMaxPanel.setBounds(browserWidth.intValue() - 40 - 40, -5, 40, 40); 
  208.     layeredPane.add(headMaxPanel, JLayeredPane.MODAL_LAYER); 
  209.   
  210.     JLabel headMaxLabel = new JLabel(""); 
  211.     headMaxPanel.add(headMaxLabel); 
  212.     headMaxLabel.setIcon(headMaxImg); 
  213.     headMaxLabel.addMouseListener(new MouseAdapter() { 
  214.      // 鼠标点击关闭图片,实现关闭窗体的功能 
  215.      @Override 
  216.      public void mouseClicked(MouseEvent e) { 
  217.       // 判断窗体当前宽度,如果与计算机分辨率同样宽,那么窗体宽度变为默认值,如果小于计算机分辨率宽度,那么窗体变为最大化显示  
  218.       if (frame.getSize().getWidth() < ScreenSize.getScreenWidth()) { 
  219.        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);// 窗体最大化 
  220.        // 创建图片对象 
  221.        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_max_01.jpg")); 
  222.        // 设置图片在窗体中显示的宽度、高度 
  223.        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  224.        headMaxLabel.setIcon(maxImg1); 
  225.       } else { 
  226.        frame.setSize(1600, 900); 
  227.        frame.setLocationRelativeTo(frame.getOwner()); 
  228.        // 创建图片对象 
  229.        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_01.jpg")); 
  230.        // 设置图片在窗体中显示的宽度、高度 
  231.        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  232.        headMaxLabel.setIcon(maxImg1); 
  233.       } 
  234.   
  235.      } 
  236.   
  237.      // 鼠标进入,换关闭的背景图片 
  238.      @Override 
  239.      public void mouseEntered(MouseEvent e) { 
  240.       // 判断窗体当前宽度与计算机分辨率宽度大小 
  241.       if (frame.getSize().getWidth() < ScreenSize.getScreenWidth()) { 
  242.        //窗体宽度小于计算机分辨率宽度,图片应显示中间那种 
  243.        // 创建图片对象 
  244.        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_02.jpg")); 
  245.        // 设置图片在窗体中显示的宽度、高度 
  246.        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  247.        headMaxLabel.setIcon(maxImg1); 
  248.       }else
  249.        // 创建图片对象 
  250.        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_max_02.jpg")); 
  251.        // 设置图片在窗体中显示的宽度、高度 
  252.        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  253.        headMaxLabel.setIcon(maxImg1); 
  254.       } 
  255.      } 
  256.   
  257.      // 鼠标离开,换关闭的背景图片 
  258.      @Override 
  259.      public void mouseExited(MouseEvent e) { 
  260.       // 判断窗体当前宽度与计算机分辨率宽度大小 
  261.       if (frame.getSize().getWidth() < ScreenSize.getScreenWidth()) { 
  262.        //窗体宽度小于计算机分辨率宽度,图片应显示中间那种 
  263.        // 创建图片对象 
  264.        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_middle_01.jpg")); 
  265.        // 设置图片在窗体中显示的宽度、高度 
  266.        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  267.        headMaxLabel.setIcon(maxImg1); 
  268.       }else
  269.        // 创建图片对象 
  270.        ImageIcon maxImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_max_01.jpg")); 
  271.        // 设置图片在窗体中显示的宽度、高度 
  272.        maxImg1.setImage(maxImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  273.        headMaxLabel.setIcon(maxImg1); 
  274.       } 
  275.      } 
  276.     }); 
  277.     /** 
  278.      * 插入右边最小化背景图片及功能 
  279.      */ 
  280.     // 创建图片对象 
  281.     ImageIcon headMinImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_min_01.jpg")); 
  282.     // 设置图片在窗体中显示的宽度、高度 
  283.     headMinImg.setImage(headMinImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  284.   
  285.     JPanel headMinPanel = new JPanel(); 
  286.     headMinPanel.setBounds(browserWidth.intValue() - 40 - 40 - 40, -5, 40, 40); 
  287.     layeredPane.add(headMinPanel, JLayeredPane.MODAL_LAYER); 
  288.   
  289.     JLabel headMinLabel = new JLabel(""); 
  290.     headMinPanel.add(headMinLabel); 
  291.     headMinLabel.setIcon(headMinImg); 
  292.     headMinLabel.addMouseListener(new MouseAdapter() { 
  293.      // 鼠标点击关闭图片,实现关闭窗体的功能 
  294.      @Override 
  295.      public void mouseClicked(MouseEvent e) { 
  296.       frame.setExtendedState(JFrame.ICONIFIED);// 最小化窗体 
  297.      } 
  298.   
  299.      // 鼠标进入,换关闭的背景图片 
  300.      @Override 
  301.      public void mouseEntered(MouseEvent e) { 
  302.       // 创建图片对象 
  303.       ImageIcon mainImg1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_min_02.jpg")); 
  304.       // 设置图片在窗体中显示的宽度、高度 
  305.       mainImg1.setImage(mainImg1.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  306.       headMinLabel.setIcon(mainImg1); 
  307.      } 
  308.   
  309.      // 鼠标离开,换关闭的背景图片 
  310.      @Override 
  311.      public void mouseExited(MouseEvent e) { 
  312.       // 创建图片对象 
  313.       ImageIcon headMinImg = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_min_01.jpg")); 
  314.       // 设置图片在窗体中显示的宽度、高度 
  315.       headMinImg.setImage(headMinImg.getImage().getScaledInstance(40, 40, Image.SCALE_DEFAULT)); 
  316.       headMinLabel.setIcon(headMinImg); 
  317.      } 
  318.     }); 
  319.     /** 
  320.      * 设置检测窗体大小发生变化的事件 
  321.      */ 
  322.     frame.addComponentListener(new ComponentAdapter() { 
  323.      @Override 
  324.      public void componentResized(ComponentEvent e) { 
  325.       /** 
  326.        * 获取尺寸变化后的窗体的宽度、高度 
  327.        */ 
  328.       browserWidth = frame.getSize().getWidth(); 
  329.       browserHeight = frame.getSize().getHeight(); 
  330.       /** 
  331.        * 浏览器顶部窄背景图片宽度改变 
  332.        */ 
  333.       layeredPane.setBounds(0, -5, browserWidth.intValue(), 34); 
  334.       titlePanel.setBounds(32, 6, browserWidth.intValue()-150, 20); 
  335.       // 创建图片对象 
  336.       ImageIcon img1 = new ImageIcon(EagleBrowser1.class.getResource("/images/browser_head.jpg")); 
  337.       // 设置图片在窗体中显示的宽度、高度 
  338.       img1.setImage( 
  339.         img1.getImage().getScaledInstance(browserWidth.intValue(), 40, Image.SCALE_DEFAULT)); 
  340.       panel.setBounds(0, -5, browserWidth.intValue(), 40); 
  341.       panel.add(lblNewLabel); 
  342.       lblNewLabel.setIcon(img1); 
  343.       /** 
  344.        * 浏览器顶部窄条右侧最小化、最大化、关闭按钮图片根据宽度进行定位 
  345.        */ 
  346.       headClosePanel.setBounds(browserWidth.intValue() - 40, -5, 40, 40);// 浏览器顶部关闭图片定位 
  347.       headMaxPanel.setBounds(browserWidth.intValue() - 40 - 40, -5, 40, 40);// 浏览器顶部最大化图片定位 
  348.       headMinPanel.setBounds(browserWidth.intValue() - 40 - 40 - 40, -5, 40, 40);// 浏览器顶部最小化图片定位 
  349.       /** 
  350.        * 浏览器宽度、高度进行改变 
  351.        */ 
  352.       //设置浏览器距离头部的距离高度 
  353.       webBrowserPanel.setBounds(0, 29, browserWidth.intValue(), browserHeight.intValue()-29);     
  354.      } 
  355.     }); 
  356.   
  357.    } 
  358.   }); 
  359.   // 必须将下行代码注释掉,否则不能够跳转到此窗体 
  360.   // NativeInterface.runEventPump(); 
  361.  } 
  362.   
  363.  public static void main(String[] args) { 
  364.   String url = "http://localhost:8080/NativeSwitingTest/user/user_list.html"
  365.   String title = "测试CS包浏览器"
  366.   EagleBrowser1 eagleBrowser = new EagleBrowser1(url, title); 
  367.  } 
  368.   

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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嵌套浏览器的具体步骤就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/lsy-blogs/p/7700564.html