点击按钮更改JEditorPane内的html页面

时间:2016-11-10 14:48:54

标签: java swing jeditorpane

任何想法如何更改Jdrame中按钮点击事件的JEditorPane内部查看的html页面,对不起我是java的新手,所以基本的解释将非常感激。(需要查找内容,其中第1页内容写在这里)

<input type="checkbox" id="h1" class="hide"/>
<input type="checkbox" id="h2" class="hide"/>
<table>
  <thead>
    <tr>
      <th>
        <label for="h1">Heading 1</label>
      </th>
      <th>
        <label for="h2">Heading 2</label>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td data-attr="h1">
        <span class="new hide">New Content 1</span>
        <span>Content 1</span>
      </td>
      <td data-attr="h2">
        <span class="new hide">New Content 2</span>
        <span>Content 2</span>
      </td>
    </tr>
    <tr>
      <td data-attr="h1">
        <span class="new hide">New Content 1</span>
        <span>Content 1</span>
      </td>
      <td data-attr="h2">
        <span class="new hide">New Content 2</span>
        <span>Content 2</span>
      </td>
    </tr>
  </tbody>
</table>

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

1 个答案:

答案 0 :(得分:1)

当事情不起作用时,首先要做的是将代码简化为最简单的显示错误。这段代码中有很多错误我只是在简化过程中删除了。但是从这个工作代码开始,一点一点地改变它,直到它再次中断,然后准备一个错误的MCVE并在这里发布。

在我进入一个有效的例子之前的其他提示。

  1. 没有四个名称相同的按钮!调试时会让人感到困惑,并且最终用户会感到困惑。如果您无法想到更多有用的名称,请使用与属性名称相同或类似的文本。
  2. “点击按钮上的不可见/可见”部分与问题无关,因此为了简化代码,请删除该部分,并从一开始就让面板包含3个按钮。
  3. 但话说回来,只需要2个按钮才能看到它工作或失败。
  4. 不要在布局约束中使用魔术数字!我怀疑这些按钮最终会出现在你打算出现的地方。
  5. 在部署之前,应用程序资源将成为嵌入式资源,所以现在开始访问它们就好像它们一样。必须通过URL而不是文件访问。有关如何形成网址,请参阅info. page for embedded resource
  6. 说了这么多,剩下的问题总结如下:

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

    该属性 不是URL ,而是String。调用属性url不会改变它。然后,当调用jep.setPage(url);时,该方法将假定String表示File路径并相应地处理它(或相应地失败)。由于该字符串不代表有效的文件路径,因此它将失败。

    以下是仅使用2个按钮和实际网址的工作代码。

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