2016-11-10 2 views
0

Jede Idee, wie HTML-Seite in einem JEditorPane auf Knopfdruck Ereignisse in JFrame angesehen werden, tut mir leid, ich bin neu in Java, so eine grundlegende Erklärung wird wirklich geschätzt wo Seite 1 Inhalt hier geschrieben wird)Ändern der HTML-Seite in JEditorPane auf Knopfdruck

package test1; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.IOException; 
import java.net.MalformedURLException; 
import java.net.URI; 
import java.net.URL; 

import javax.swing.JButton; 
import javax.swing.JEditorPane; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.event.HyperlinkEvent; 
import javax.swing.event.HyperlinkListener; 

public class check1 extends JFrame implements ActionListener{ 
    JEditorPane jep; 
    JScrollPane scroll; 
    JPanel p,p1; 
    JButton b,b1,b2,b3; 
    Dimension d; 
    String url; 
    public check1() { 
     d = new Dimension(500, 1500); 

     b = new JButton("Click ME"); 
     b.addActionListener(this); 

     b1 = new JButton("Click ME"); 

     b2 = new JButton("Click ME"); 
     //b2.setBounds(0, 100, 70, 40); 
     b3 = new JButton("Click ME"); 
     //b3.setBounds(0, 150, 70, 40); 

     p = new JPanel(); 
     p.setLayout(new FlowLayout()); 
     p.add(b); 

     p1 = new JPanel(); 
     p1.setLayout(new GridLayout(4, 2, 1, 1)); 
     p1.add(b1,0,0); 
     p1.add(b2,0,1); 
     p1.add(b3,2,0); 
     p1.setVisible(false); 



     try { 
      jep = new JEditorPane("file:///C:/Users/Chinmay/workspace/project1/src/page1.html"); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     jep.setEditable(true); 



     scroll = new JScrollPane(jep); 
     setLayout(new BorderLayout()); 
     getContentPane().add(p,BorderLayout.NORTH); 
     getContentPane().add(p1,BorderLayout.WEST); 
     getContentPane().add(scroll,BorderLayout.CENTER); 

     setSize(1000, 800); 
     setVisible(true); 
     setLocationRelativeTo(null); 

    } 
    public static void main(String args[]) 
    { 
     new check1().setVisible(true); 
    } 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource().equals(b)) 
     { 

      p1.setVisible(true); 
     } 
     else if(e.getSource().equals(b1)) 
     { 

      url ="file:///C:/Users/Chinmay/workspace/project1/src/page.html"; 
      try { 
       jep.setPage(url); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 
     else if(e.getSource().equals(b2)) 
     { 
      url ="file:///C:/Users/Chinmay/workspace/project1/src/page1.html"; 
      try { 
       jep.setPage(url); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 
     else if(e.getSource().equals(b3)) 
     { 
      url ="file:///C:/Users/Chinmay/workspace/project1/src/page2.html"; 
      try { 
       jep.setPage(url); 
      } catch (IOException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
     } 

    } 

} 

https://i.stack.imgur.com/Iz7Jt.png

+0

es funktionierte nicht, auch wenn ich ein Dateiobjekt erstellte und es als jep.setPage (neue Datei (url) .toURI(). ToURL()); Die Seite würde sich nicht ändern, muss ich etwas tun, um den Inhalt von JEditorPane wie repaint() zu aktualisieren; Methode verwenden wir in Applet @AndrewThompson – charle819

+0

Es gibt keine Notwendigkeit, 'repaint()' für eine 'JEditorPane' in Applets oder Anwendungen aufzurufen. –

+0

Für bessere Hilfe, früher, ein [MCVE] oder [kurze, unabhängige, korrekte Beispiel] (http://www.sscce.org/). In diesem Fall müssten Sie tatsächliche Webseiten für die URLs verwenden, da diese Dateien nicht von anderen Personen auf den Standorten gespeichert sind, auf denen sie sich auf Ihrem Computer befinden. –

Antwort

1

Wenn die Dinge nicht funktionieren, ist das erste, was zu tun, den Code vereinfachen bis auf die einfachsten, die den Fehler anzeigt. Es gab viele Fehler in diesem Code, die ich einfach im Zuge der Vereinfachung entfernt habe. Aber starte von diesem Arbeitscode und ändere es Stück für Stück, bis es wieder bricht, bereite dann einen MCVE des Fehlers vor und poste es hier.

Weitere Tipps, bevor ich in ein Arbeitsbeispiel komme.

  1. Keine vier Knöpfe mit identischen Namen haben! Es ist verwirrend beim Debuggen und verwirrend für den Endbenutzer. Wenn Sie keine nützlicheren Namen für sie finden können, verwenden Sie den gleichen oder einen ähnlichen Text wie den Namen des Attributs.
  2. Der Teil "unsichtbar/sichtbar beim Klicken auf die Schaltfläche" war für das Problem nicht relevant. Um den Code zu vereinfachen, entfernen Sie diesen Teil und lassen Sie das Bedienfeld mit 3 Schaltflächen von Anfang an sichtbar.
  3. Aber gesagt, es war nur notwendig, 2 Tasten zu haben, um zu sehen, ob es funktioniert oder nicht.
  4. Verwenden Sie keine magischen Zahlen in Layoutbeschränkungen! Ich bezweifle, dass die Knöpfe dort enden, wo du sie haben wolltest.
  5. Anwendungsressourcen werden zum Zeitpunkt der Bereitstellung zu eingebetteten Ressourcen. Es ist also ratsam, sofort auf sie zuzugreifen, als ob sie gerade wären. Auf eine muss per URL anstatt Datei zugegriffen werden. Informationen zum Erstellen der URL finden Sie unter info. page for embedded resource.

Having said, dass alle wurde das verbleibende Problem in resümiert:

url = "file:///C:/Users/Chinmay/workspace/project1/src/page1.html"‌​; 

keine URL, aber ein String Das Attribut ist . Der Aufruf des Attributs url wird das nicht ändern. Dann, wenn jep.setPage(url); aufgerufen wird, wird die Methode davon ausgehen, dass String einen File Pfad darstellt und dementsprechend behandelt wird (oder entsprechend fehlschlägt). Da diese Zeichenfolge keinen gültigen Dateipfad darstellt, schlägt sie fehl.

Hier ist ein Arbeitscode mit nur 2 Schaltflächen und tatsächlichen URLs.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.io.IOException; 
import java.net.URL; 

public class check1 extends JFrame implements ActionListener { 

    JEditorPane jep; 
    JScrollPane scroll; 
    JPanel p, p1; 
    JButton b1, b2; 
    String url; 

    public check1() { 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

     b1 = new JButton("Button 1"); 
     b1.addActionListener(this); 
     b2 = new JButton("Button 2"); 
     b2.addActionListener(this); 

     p = new JPanel(); 
     p.setLayout(new FlowLayout()); 

     p1 = new JPanel(); 
     p1.setLayout(new GridLayout(4, 2, 1, 1)); 
     p1.add(b1); 
     p1.add(b2); 

     try { 
      jep = new JEditorPane(
        new URL("http://docs.oracle.com/javase/8/docs/api/javax/swing/JFrame.html#constructor.summary")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     scroll = new JScrollPane(jep); 
     setLayout(new BorderLayout()); 
     getContentPane().add(p, BorderLayout.NORTH); 
     getContentPane().add(p1, BorderLayout.WEST); 
     getContentPane().add(scroll, BorderLayout.CENTER); 

     setSize(1000, 800); 
     setVisible(true); 
     setLocationRelativeTo(null); 
    } 

    public static void main(String args[]) { 
     new check1().setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     if (e.getSource().equals(b1)) { 
      url = "http://docs.oracle.com/javase/8/docs/api/javax/swing/JButton.html#constructor.summary"; 
     } else if (e.getSource().equals(b2)) { 
      url = "http://docs.oracle.com/javase/8/docs/api/javax/swing/JApplet.html#constructor.summary"; 
     } 
     try { 
      jep.setPage(new URL(url)); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
    } 
} 
+0

Nebenbei bemerkt enthält dieser bearbeitete Code noch eine Menge Dinge, die am besten geändert werden würden, aber da sie nicht Teil des aktuellen (unmittelbaren) Problems waren, entschied ich, sie so zu lassen, wie sie sind. –

+1

es hat funktioniert, vielen Dank wirklich. Ich bin neu hier, also danke für die Tipps auch. – charle819