2016-03-26 11 views
0

Ich verwende Webview in JavaFx und in meiner App habe ich mehrere Panels, auf denen ich ein Browserfenster einbetten möchte. Ich kämpfe mit dem objektorientierten Bit. Kannst du sehen, was ich anders machen muss?Übergabe von Objekten an eine Klasse in Java

In meinem Hauptprogramm habe ich dies für einen Panel:

  JPanel jPanel = new JPanel(new BorderLayout()); 
      browser browser = new browser(jPanel); 
      browser.setVisible(true); 
      browser.loadURL("http://www.google.com"); 

ich einen roten Unterstrich in der zweiten Zeile.

In meinem Browser Klasse:

import javafx.application.Platform; 
import javafx.embed.swing.JFXPanel; 
import javafx.scene.Scene; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javax.swing.*; 
import java.awt.*; 
import java.net.MalformedURLException; 
import java.net.URL; 


public class browser extends JFrame { 

    private final JFXPanel jfxPanel = new JFXPanel(); 
    private WebEngine engine; 
    //private final JPanel panel = new JPanel(new BorderLayout()); 


    public browser(object panel) { 
     super(); 
     initComponents(); 
    } 


    private void initComponents() { 

     createScene(); 

     panel.add(jfxPanel, BorderLayout.CENTER); 

     getContentPane().add(panel); 

     setPreferredSize(new Dimension(1024, 600)); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 

    } 

    private void createScene() { 

     Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 

       WebView view = new WebView(); 
       engine = view.getEngine(); 


       jfxPanel.setScene(new Scene(view)); 
      } 
     }); 
    } 

    public void loadURL(final String url) { 
     Platform.runLater(new Runnable() { 
      @Override 
      public void run() { 
       String tmp = toURL(url); 

       if (tmp == null) { 
        tmp = toURL("http://" + url); 
       } 

       engine.load(tmp); 
      } 
     }); 
    } 

    private static String toURL(String str) { 
     try { 
      return new URL(str).toExternalForm(); 
     } catch (MalformedURLException exception) { 
       return null; 
     } 
    } 


} 

ich einen roten Unterstrich, wo es Gegenstand sagt und wo immer auch sagt, es Panel.

+0

Ich sehe Sie nichts mit dem Parameter in Ihrem Konstruktor tun, und ich bin ziemlich sicher, dass Objekt in Java groß geschrieben wird. –

+0

Großbuchstaben 'Objekt'. Außerdem hat es keinen Sinn, diesen Parameter im Konstruktor zu haben, wenn Sie ihn nicht benutzen. Sie werden nie einer anderen Variablen zugewiesen. Und Sie möchten wahrscheinlich einen expliziteren Typ als 'java.lang.Object'. –

+0

Was ist 'Objekt' und warum übergeben Sie es an den Konstruktor. Wenn Sie ein Objekt wie "Superklasse aller Klassen" -Objekt verwenden möchten, ist es in Großbuchstaben: 'Objekt' – fabian

Antwort

0
public browser(object panel) 

Ihre variable panel gut ein Objekt sein könnte, aber das Klassenobjekt wird als Object definiert, nicht object. Verursacht die "rote Linie" A.K.A. ein Compilerfehler.

Der Grund, warum Sie auch einen Compilerfehler im Panel erhalten, ist, dass sie in Ihren anderen Methoden nicht sichtbar sind. Sie übergeben Ihr Objekt panel in den Konstruktor, aber es wird nie innerhalb der Klasse festgelegt. Z.B. Erstellen einer klassenweiten Variable wie:

private Object panel; 
public browser(Object panel) { 
    super(); 
    initComponents(); 
    this.panel = panel; 
} 

Damit wird Ihr Panel-Objekt in der gesamten Klasse angezeigt.

+0

Vielen Dank für Ihre Hilfe. Dies hat es geschafft, den Job zu erledigen. Wenn ich jedem ein ähnliches geben könnte wie ich. – kev002

Verwandte Themen