我正在开发一个Java Swing地图应用程序,它会获取一个网址,并以不同的缩放级别从Google地图加载地图。
但地图中的地址栏很烦人,我想摆脱它或减少它的空间。
在下面的代码中,我首先尝试了:Use_iFrame_B=false
;
这样会得到一张像这样的大地址栏的地图,并且缩放功能不起作用:
然后我尝试了:Use_iFrame_B=true
;
这将显示带缩放的地图,但边缘较大:
所以,我的问题是:
Use_iFrame_B=true
?以下是我的节目:
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(); } });
}
}
答案 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);