单击按钮更改 JEditorPane 内的 html 页面
Changing html page inside JEditorPane on button click
知道如何在 JFrame 中的按钮单击事件中更改 html 在 JEditorPane 中查看的页面,抱歉,我是 java 的新手,因此非常感谢您提供基本解释。(需要更改这里写的是第一页的内容)
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();
}
}
}
}
当出现问题时,首先要做的是将代码简化为显示错误的最简单代码。这段代码中有很多错误,我在简化它的过程中简单地删除了它。但是从这个工作代码开始,一点一点地改变它,直到它再次崩溃,然后准备一个错误的 MCVE 并 post 它在这里。
进入工作示例之前的其他提示。
- 不要有四个同名的按钮!调试时很混乱,最终用户也很困惑。如果您想不出更有用的名称,请使用与属性名称相同或相似的文本。
- 'invisible / visible on button click' 部分与问题无关,因此为了简化代码,删除该部分并让包含 3 个按钮的面板从一开始就可见。
- 不过话说回来,只需要有 2 个按钮就可以看到它是工作还是失败。
- 不要在布局约束中使用幻数!我怀疑这些按钮最终会出现在您希望它们出现的位置。
- 应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。关于如何形成 URL.
的 embedded-resource must be accessed by URL rather than file. See the info. page for embedded resource
说了这么多,剩下的问题总结起来就是:
url = "file:///C:/Users/Chinmay/workspace/project1/src/page1.html";
属性 不是 URL
,而是 String
。调用属性 url
不会改变它。然后当 jep.setPage(url);
被调用时,该方法将假定 String
代表一个 File
路径并相应地处理它(或相应地失败)。由于该字符串不代表有效的文件路径,因此它将失败。
这是一个仅使用 2 个按钮和实际 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();
}
}
}
知道如何在 JFrame 中的按钮单击事件中更改 html 在 JEditorPane 中查看的页面,抱歉,我是 java 的新手,因此非常感谢您提供基本解释。(需要更改这里写的是第一页的内容)
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();
}
}
}
}
当出现问题时,首先要做的是将代码简化为显示错误的最简单代码。这段代码中有很多错误,我在简化它的过程中简单地删除了它。但是从这个工作代码开始,一点一点地改变它,直到它再次崩溃,然后准备一个错误的 MCVE 并 post 它在这里。
进入工作示例之前的其他提示。
- 不要有四个同名的按钮!调试时很混乱,最终用户也很困惑。如果您想不出更有用的名称,请使用与属性名称相同或相似的文本。
- 'invisible / visible on button click' 部分与问题无关,因此为了简化代码,删除该部分并让包含 3 个按钮的面板从一开始就可见。
- 不过话说回来,只需要有 2 个按钮就可以看到它是工作还是失败。
- 不要在布局约束中使用幻数!我怀疑这些按钮最终会出现在您希望它们出现的位置。
- 应用程序资源在部署时将成为嵌入式资源,因此明智的做法是立即开始访问它们。关于如何形成 URL. 的 embedded-resource must be accessed by URL rather than file. See the info. page for embedded resource
说了这么多,剩下的问题总结起来就是:
url = "file:///C:/Users/Chinmay/workspace/project1/src/page1.html";
属性 不是 URL
,而是 String
。调用属性 url
不会改变它。然后当 jep.setPage(url);
被调用时,该方法将假定 String
代表一个 File
路径并相应地处理它(或相应地失败)。由于该字符串不代表有效的文件路径,因此它将失败。
这是一个仅使用 2 个按钮和实际 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();
}
}
}