如何摆脱JFXPanel中的边缘?

时间:2016-05-29 21:29:21

标签: google-maps javafx-2

我正在开发一个Java Swing地图应用程序,它会获取一个网址,并以不同的缩放级别从Google地图加载地图。

但地图中的地址栏很烦人,我想摆脱它或减少它的空间。

在下面的代码中,我首先尝试了:Use_iFrame_B=false;

这样会得到一张像这样的大地址栏的地图,并且缩放功能不起作用:

enter image description here

然后我尝试了:Use_iFrame_B=true;

这将显示带缩放的地图,但边缘较大:

enter image description here

所以,我的问题是:

  1. 当Use_iFrame_B = false时,如何在第一种情况下隐藏地址栏并仍然在地址上显示指示符[红气球]?
  2. 如何在上述情况下进行缩放[Use_iFrame_B = false]。
  3. 如果上面的1和2不可行,那么我更喜欢使用iFrame,它会显示更小的更有意义的地址,缩放也有效。但它留下了大边,如何在Use_iFrame_B=true
  4. 时摆脱这些边缘

    以下是我的节目:

    import java.awt.*;
    import java.io.File;
    import java.net.URL;
    
    import javafx.embed.swing.JFXPanel;
    import javafx.application.Platform;
    import javafx.collections.ObservableList;
    import javafx.scene.Scene;
    import javafx.scene.layout.*;
    import javafx.scene.web.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    /**
     Note using the browser might require setting the properties
     - http.proxyHost
     - http.proxyPort
     e.g. -Dhttp.proxyHost=webcache.mydomain.com -Dhttp.proxyPort=8080
    */
    
    public class JavaFX_Browser_Panel extends JPanel
    {
      static int Edge_W=0,Edge_H=0;
      private int PANEL_WIDTH_INT=1200,PANEL_HEIGHT_INT=900;
      private JFXPanel browserFxPanel;
      private Pane browser;
      WebView view;
      WebEngine eng;
    //  static String Url,Urls[]=new String[]{"http://www.Yahoo.com","www.Google.com","dell.com","C:/Dir_Fit/Yahoo_Maps_Frame.html","C:/Dir_Broadband_TV/TV.html"};
    //  static String Url,Urls[]=new String[]{"C:/Dir_Broadband_TV/TV.html"};
    //  static String Url,Urls[]=new String[]{"http://screen.yahoo.com/cecily-strong-snl-skits/hermes-000000630.html"};
      static String Url,Urls[]=new String[]{"https://www.google.com/maps/@33.8470183,-84.3677322,11z"};
    
      public JavaFX_Browser_Panel() { init(); }
    
      public JavaFX_Browser_Panel(int W,int H)
      {
        PANEL_WIDTH_INT=W+Edge_W;
        PANEL_HEIGHT_INT=H+Edge_H;
        init();
      }
    
      public JavaFX_Browser_Panel(String Url)
      {
        this.Url=Url;
        init();
        setURL(Url);
      }
    
      void init()
      {
        FlowLayout FL=new FlowLayout();
        FL.setHgap(0);
        FL.setVgap(0);
        setLayout(FL);
        browserFxPanel=new JFXPanel();
    //    browserFxPanel.setBorder(new EmptyBorder(0,0,0,0));
        add(browserFxPanel);
        setPreferredSize(new Dimension(PANEL_WIDTH_INT,PANEL_HEIGHT_INT));
        Platform.runLater(new Runnable() { public void run() { createScene(); } });
      }
    
      public static void Set_Edge(int W,int H)
      {
        Edge_W=W;
        Edge_H=H;
      }
    
      public String getURL() { return eng.getLocation(); }
    
      public String goBack()
      {    
        final WebHistory history=eng.getHistory();
        ObservableList<WebHistory.Entry> entryList=history.getEntries();
        int currentIndex=history.getCurrentIndex();
    //    Out("currentIndex = "+currentIndex);
    //    Out(entryList.toString().replace("],","]\n"));
    
        Platform.runLater(new Runnable() { public void run() { history.go(-1); } });
        return entryList.get(currentIndex>0?currentIndex-1:currentIndex).getUrl();
      }
    
      public String goForward()
      {    
        final WebHistory history=eng.getHistory();
        ObservableList<WebHistory.Entry> entryList=history.getEntries();
        int currentIndex=history.getCurrentIndex();
    //    Out("currentIndex = "+currentIndex);
    //    Out(entryList.toString().replace("],","]\n"));
    
        Platform.runLater(new Runnable() { public void run() { history.go(1); } });
        return entryList.get(currentIndex<entryList.size()-1?currentIndex+1:currentIndex).getUrl();
      }
    
      public void refresh() { Platform.runLater(new Runnable() { public void run() { eng.reload(); } }); }
    
      public void stop() { Platform.runLater(new Runnable() { public void run() { eng.getLoadWorker().cancel(); } }); }
    
      public void Load_iFrame(final String Url,final int W,final int H)
      {
        Platform.runLater(new Runnable()
        {
          public void run()
          {
    
            if (new File(Url).exists()) setURL(new File(Url));
            else eng.loadContent("<iframe width="+W+" height="+H+" src="+Url+" style=border:0; marginheight=0 marginwidth=0 allowfullscreen></iframe>");
    //        else eng.loadContent("<iframe width="+W+" height="+H+" src="+Url+" frameborder=0 marginheight=0 marginwidth=0 allowfullscreen></iframe>");
    //        else eng.loadContent("<iframe width='990' height='915' src="+Url+" frameborder='0' allowfullscreen></iframe>");
          }
        });
      }
    
      public void setURL(final String Url)
      {
        Platform.runLater(new Runnable()
        {
          public void run()
          {
            if (new File(Url).exists()) setURL(new File(Url));
            else eng.load((Url.startsWith("http://") || Url.startsWith("https://"))?Url:"http://"+Url);
          }
        });
      }
    
      public void setURL(final URL Url)
      {
        Platform.runLater(new Runnable()
        {
          public void run()
          {
            try { eng.load(Url.toString()); }
            catch (Exception e) { e.printStackTrace(); }
          }
        });
      }
    
      public void setURL(final File file)
      {
        Platform.runLater(new Runnable()
        {
          public void run()
          {
            try { eng.load(file.toURI().toURL().toString()); }
            catch (Exception e) { e.printStackTrace(); }
          }
        });
      }
    
      private void createScene()
      {
        browser=createBrowser();
        browserFxPanel.setScene(new Scene(browser));
      }
    
      private Pane createBrowser()
      {
        Double widthDouble=new Integer(PANEL_WIDTH_INT).doubleValue();
        Double heightDouble=new Integer(PANEL_HEIGHT_INT).doubleValue();
        view=new WebView();
        view.setMinSize(widthDouble,heightDouble);
        view.setPrefSize(widthDouble,heightDouble);
        eng=view.getEngine();
        GridPane grid=new GridPane();
        grid.getChildren().addAll(view);
        return grid;
      }
    
      public static void out(String message) { System.out.print(message); }   
      public static void Out(String message) { System.out.println(message); }
    
      public static void main(String[] args)
      {
        final JavaFX_Browser_Panel demo=new JavaFX_Browser_Panel(Urls[0]);
    
        int i=0;
    
        SwingUtilities.invokeLater(new Runnable()
        {
          public void run()
          {
    //        try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); }
    //        catch (Exception e) { e.printStackTrace(); }
    
            JFrame frame=new JFrame("JavaFX 2.2 in Swing");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            frame.add(demo);
    
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
          }
        });
    
        while (i<Urls.length-1)
        {
          try
          {
            demo.setURL(Urls[++i]);
            Thread.sleep(2000);
          }
          catch (Exception e) { e.printStackTrace(); }
        }
    //    demo.goBack();
      }
    }
    
    
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    
    public class Map_Maker_2 extends JPanel implements Runnable
    {
      public static final long serialVersionUID=26362862L;
      int W=1600,H=1200,JavaFX_Browser_Edge_W=200,JavaFX_Browser_Edge_H=200,Upper_Left_Button_Panel_W=90;
      static Dimension Screen_Size=Toolkit.getDefaultToolkit().getScreenSize();
      String Google_Url="http://maps.google.com/maps?q=Address&t=m&z=Zoom",Address="760 West Genesee Street Syracuse NY 13204",Url;
      Insets An_Inset=new Insets(0,0,0,0);
      JTextArea Upper_Left_TextArea=new JTextArea(Address);
      JavaFX_Browser_Panel Left_JavaFX_Browser_Panel,Upper_Right_JavaFX_Browser_Panel,Lower_Right_JavaFX_Browser_Panel;
    //  boolean Use_iFrame_B=true;
      boolean Use_iFrame_B=false;
      Thread Empty_JPanel_Thread;
    
      public Map_Maker_2()
      {
        JavaFX_Browser_Panel.Set_Edge(JavaFX_Browser_Edge_W,JavaFX_Browser_Edge_H);
    
        FlowLayout Fl=new FlowLayout(0,0,0);
        setLayout(Fl);
    
        JPanel Left_Panel=new JPanel(Fl);
        Left_Panel.setBorder(new EtchedBorder());
        Left_Panel.setPreferredSize(new Dimension(W/2,H));
        add(Left_Panel);
    
        JPanel Upper_Left_Panel=new JPanel(Fl);
        Upper_Left_Panel.setBorder(new EtchedBorder());
        Upper_Left_Panel.setPreferredSize(new Dimension(W/2-2,H/4-2));
        Left_Panel.add(Upper_Left_Panel);
    
        Upper_Left_TextArea.setFont(new Font("Times New Roman",0,16));
        Upper_Left_TextArea.setBorder(new EtchedBorder());
        Upper_Left_TextArea.setPreferredSize(new Dimension(W/2-2-Upper_Left_Button_Panel_W-4,H/4-6));
        Upper_Left_Panel.add(Upper_Left_TextArea);
    
        FlowLayout Button_Panel_Fl=new FlowLayout(0,0,66);
    
        JPanel Upper_Left_Button_Panel=new JPanel(Button_Panel_Fl);
        Upper_Left_Button_Panel.setBorder(new EtchedBorder());
        Upper_Left_Button_Panel.setPreferredSize(new Dimension(Upper_Left_Button_Panel_W,H/4-6));
        Upper_Left_Panel.add(Upper_Left_Button_Panel);
    
        JButton Get_Maps_Button=new JButton("Get Maps");
        Get_Maps_Button.setForeground(new Color(0,0,230));
        Get_Maps_Button.setFont(new Font("Times New Roman",0,16));
        Get_Maps_Button.setMargin(An_Inset);
        Get_Maps_Button.setPreferredSize(new Dimension(Upper_Left_Button_Panel_W-5,26));
        Get_Maps_Button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { Get_Maps(); } });
    
        Upper_Left_Button_Panel.add(Get_Maps_Button);
    
        JButton Print_Button=new JButton("Print");
        Print_Button.setForeground(new Color(0,0,230));
        Print_Button.setFont(new Font("Times New Roman",0,16));
        Print_Button.setMargin(An_Inset);
        Print_Button.setPreferredSize(new Dimension(Upper_Left_Button_Panel_W-5,26));
        Upper_Left_Button_Panel.add(Print_Button);
    
    
        JPanel Lower_Left_Panel=new JPanel(Fl);
        Lower_Left_Panel.setPreferredSize(new Dimension(W/2-2,H*3/4));
        Left_Panel.add(Lower_Left_Panel);
    
        Left_JavaFX_Browser_Panel=new JavaFX_Browser_Panel(W/2-4,H*3/4);
        Lower_Left_Panel.add(Left_JavaFX_Browser_Panel);
    
        JPanel Right_Panel=new JPanel(new FlowLayout(0,0,1));
        Right_Panel.setBorder(new EtchedBorder());
        Right_Panel.setPreferredSize(new Dimension(W/2,H-2));
        add(Right_Panel);
    
        JPanel Upper_Right_Outer_Panel=new JPanel(Fl);
        Upper_Right_Outer_Panel.setBorder(new EtchedBorder());
        Upper_Right_Outer_Panel.setPreferredSize(new Dimension(W/2-4,H/2-4));
        Right_Panel.add(Upper_Right_Outer_Panel);
    
        JPanel Upper_Right_Panel=new JPanel(Fl);
        Upper_Right_Panel.setPreferredSize(new Dimension(W/2-8,H/2-8));
        Upper_Right_Outer_Panel.add(Upper_Right_Panel);
    
        Upper_Right_JavaFX_Browser_Panel=new JavaFX_Browser_Panel(W/2-8,H/2-8);
        Upper_Right_Panel.add(Upper_Right_JavaFX_Browser_Panel);
    
        JPanel Lower_Right_Outer_Panel=new JPanel(Fl);
        Lower_Right_Outer_Panel.setBorder(new EtchedBorder());
        Lower_Right_Outer_Panel.setPreferredSize(new Dimension(W/2-4,H/2-4));
        Right_Panel.add(Lower_Right_Outer_Panel);
    
        JPanel Lower_Right_Panel=new JPanel(Fl);
        Lower_Right_Panel.setPreferredSize(new Dimension(W/2-8,H/2-8));
        Lower_Right_Outer_Panel.add(Lower_Right_Panel);
    
        Lower_Right_JavaFX_Browser_Panel=new JavaFX_Browser_Panel(W/2-8,H/2-8);
        Lower_Right_Panel.add(Lower_Right_JavaFX_Browser_Panel);
    
        setPreferredSize(new Dimension(W,H));
        Get_Maps();
      }
    
      void Get_Maps()
      {
        Address=Upper_Left_TextArea.getText();
        Out(Address);
        Url=Google_Url.replace("Address",Address.replace(" ","+"));
        Out(Url);
    
        if (Use_iFrame_B)
        {
          Left_JavaFX_Browser_Panel.Load_iFrame(Url.replace("Zoom","12&output=embed"),785,890);
          Upper_Right_JavaFX_Browser_Panel.Load_iFrame(Url.replace("Zoom","16&output=embed"),778,578);
          Lower_Right_JavaFX_Browser_Panel.Load_iFrame(Url.replace("Zoom","19&output=embed"),775,575);
        }
        else
        {
          Left_JavaFX_Browser_Panel.setURL(Url.replace("Zoom","12"));           // This works fine without output=embed in url, but it will show address bar, I want to hide that
          Upper_Right_JavaFX_Browser_Panel.setURL(Url.replace("Zoom","16"));
          Lower_Right_JavaFX_Browser_Panel.setURL(Url.replace("Zoom","19"));      
        }
      }
    
      public void run()
      {
    
    
      }
    
      public void start()
      {
        if (Empty_JPanel_Thread==null)
        {
          Empty_JPanel_Thread=new Thread(this);
          Empty_JPanel_Thread.setPriority(Thread.NORM_PRIORITY);
          Empty_JPanel_Thread.start();
        }
      }
    
      public void stop() { if (Empty_JPanel_Thread!=null) Empty_JPanel_Thread=null; }
    
      private static void out(String message) { System.out.print(message); }
      private static void Out(String message) { System.out.println(message); }
    
      // Create the GUI and show it. For thread safety, this method should be invoked from the event-dispatching thread.
      static void Create_And_Show_GUI()
      {
        final Map_Maker_2 demo=new Map_Maker_2();
    
        JFrame frame=new JFrame("Map Maker 2");
        frame.add(demo);
        frame.addWindowListener( new WindowAdapter()
        {
          public void windowActivated(WindowEvent e) { }
          public void windowClosed(WindowEvent e) { }
          public void windowClosing(WindowEvent e)  { System.exit(0); }
          public void windowDeactivated(WindowEvent e)  { }
          public void windowDeiconified(WindowEvent e)  { demo.repaint(); }
          public void windowGainedFocus(WindowEvent e)  { demo.repaint(); }
          public void windowIconified(WindowEvent e)  { }
          public void windowLostFocus(WindowEvent e)  { }
          public void windowOpening(WindowEvent e) { demo.repaint(); }
          public void windowOpened(WindowEvent e)  { }
          public void windowResized(WindowEvent e) { demo.repaint(); }
          public void windowStateChanged(WindowEvent e) { demo.repaint(); }
        });
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
      }
    
      public static void main(String[] args)
      {
        // Schedule a job for the event-dispatching thread : creating and showing this application's GUI.
        SwingUtilities.invokeLater(new Runnable() { public void run() { Create_And_Show_GUI(); } });
      }
    }
    

1 个答案:

答案 0 :(得分:0)

好吧,我找到了答案:

替换JavaFX_Browser_Panel中的代码:

    if (new File(Url).exists()) setURL(new File(Url));
    else eng.loadContent("<iframe width="+W+" height="+H+" src="+Url+" style=border:0; marginheight=0 marginwidth=0 allowfullscreen></iframe>");

以下内容:

    String Content="<Html>\n"+
                   "<style>\n"+
                   "  html,body,div,iframe\n"+
                   "  {\n"+
                   "    height: 100%;\n"+
                   "    overflow: hidden;\n"+
                   "    overflow-x: hidden;\n"+
                   "    overflow-y: hidden;\n"+
                   "    margin: 0; padding: 0;\n"+
                   "  }\n"+
                   "</style>\n"+
                   "<iframe width="+W+" height="+H+" src="+Url+" style=border:0></iframe>\n"+
                   "</Html>";
    if (new File(Url).exists()) setURL(new File(Url));
    else eng.loadContent(Content);