2016-11-10 7 views
0

JFrameのボタンクリックイベントでJEditorPane内で表示されるhtmlページを変更する方法はありますか、ごめんなさい、私はJavaの初心者ですので、基本的な説明を本当に感謝します。こちらのページ1コンテンツが書かれている場合)ボタンクリック時のJEditorPane内のhtmlページの変更

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

ファイルオブジェクトを作成してjep.setPage(new File(url).toURI()。toURL())として渡しても機能しませんでした。ページが変更されない、私はrepaint()のようなJEditorPaneの内容をリフレッシュするためにsometingを行う必要がありますか?アプレットで使用するメソッド@AndrewThompson – charle819

+0

アプレットまたはアプリケーションの 'JEditorPane'に対して' repaint() 'を呼び出す必要はありません。 –

+0

すぐに役立つように、[MCVE]または[短く、自己完結型の正しい例](http://www.sscce.org/)を投稿してください。この場合、URLに実際のWebページを使用する必要があります。他の誰もあなたのマシンに存在する場所にこれらのファイルを持っていないからです。 –

答えて

1

物事が働いていない場合は、まず最初に行うには、下のエラーを表示する最も簡単にコードを単純化です。このコードには、単純化の過程で単純に削除した多くのエラーがありました。しかし、この作業コードから始めて、少しずつビットを変えてから、もう一度ブレークして、エラーのMCVEを準備してここに投稿してください。

実際の使用例に入る前に、他のヒントをご覧ください。

  1. 名前が同じ4つのボタンはありません。デバッグ時に混乱し、エンドユーザーに混乱を招きます。より有益な名前を考えることができない場合は、属性の名前と同じか類似のテキストを使用してください。
  2. '目に見えない/目に見えるボタンクリック'の部分は問題には関係していなかったので、コードを簡略化してその部分を削除し、3つのボタンを含むパネルを最初から見えるようにします。
  3. しかし、それは、それが動作するか失敗するかを見るためには、2つのボタンを持つだけで済むということでした。
  4. レイアウトの制約にマジックナンバーを使用しないでください!私はボタンがあなたがそれらを表示することを意図したところで終わっていたのではないかと疑います。
  5. アプリケーションリソースはデプロイメント時に埋め込まれたリソースになるので、今のようにアクセスすることをお勧めします。 には、ファイルではなくURLでアクセスする必要があります。 URLの作成方法については、info. page for embedded resourceをご覧ください。

はすべてのことを言っても、残りの問題がで要約した

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

属性がないURLが、Stringです。属性urlを呼び出してもそれは変更されません。次に、jep.setPage(url);が呼び出されると、このメソッドはStringFileのパスを表していると想定し、それに応じて処理します(またはそれに応じて失敗します)。その文字列は有効なファイルパスではないため、失敗します。

ここには、2つのボタンと実際のURLを使用した作業コードがあります。

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

さて、この編集されたコードには、変更が必要なものがたくさん残っていますが、現在の(直ちに)問題には含まれていないため、そのまま残すことにしました。 –

+1

うまくいってくれてありがとう。私はここで新しいので、ヒントもありがとう。 – charle819

関連する問題