2016-05-29 11 views
0

Ich entwickle eine Java Swing-Karten-Anwendung, es bekommt eine URL und lädt Karten von Google Maps mit verschiedenen Zoomstufen.Wie beseitigt man Kanten in JFXPanel?

Aber die Adressleiste in den Karten ist nervig, ich möchte sie loswerden oder ihren Platz reduzieren.

In meinem Code unten versuchte ich zuerst: Use_iFrame_B=false;

Dies wird eine Karte mit großen Adressleiste wie diese erhalten, und Zoomen funktioniert nicht:

enter image description here

Dann habe ich versucht: Use_iFrame_B=true;

Diese Karten mit Zoom zeigen, hat aber große Kanten:

enter image description here

Also, meine Fragen sind:

  1. Wenn Use_iFrame_B = false, wie die Adressleiste in der verstecken erster Fall und immer noch eine Anzeige [roter Ballon] auf der Adresse?
  2. So funktioniert Zoom im obigen Fall [Use_iFrame_B = false].
  3. Wenn 1 und 2 oben nicht möglich sind, dann würde ich lieber iFrame verwenden, die eine kleinere aussagekräftigere Adresse zeigt und Zoomen funktioniert auch. Aber es hinterlässt große Kanten, wie man diese Kanten los wird, wenn Use_iFrame_B=true?

Hier sind meine Programme:

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(); } }); 
    } 
} 

Antwort

0

Okay, fand ich die Antwort:

den Code in JavaFX_Browser_Panel ersetzen:

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>"); 

Mit folgendem:

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); 
Verwandte Themen