我正在尝试为我正在处理的应用程序创建一个帮助面板。已经使用html技术创建的帮助文件,我希望它在窗格中呈现并显示。我见过的所有代码都展示了如何渲染网站,例如“http://google.com”。我想从我的电脑上渲染一个文件,例如“文件:// C:\ tutorial.html”
这是我的代码,但似乎没有用。
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import java.awt.Color;
import java.awt.Container;
import java.io.IOException;
import static java.lang.System.err;
import static java.lang.System.out;
final class TestHTMLRendering
{
// ------------------------------ CONSTANTS ------------------------------
/**
* height of frame in pixels
*/
private static final int height = 1000;
/**
* width of frame in pixels
*/
private static final int width = 1000;
private static final String RELEASE_DATE = "2007-10-04";
/**
* title for frame
*/
private static final String TITLE_STRING = "HTML Rendering";
/**
* URL of page we want to display
*/
private static final String URL = "file://C:\\print.html";
/**
* program version
*/
private static final String VERSION_STRING = "1.0";
// --------------------------- main() method ---------------------------
/**
* Debugging harness for a JFrame
*
* @param args command line arguments are ignored.
*/
@SuppressWarnings( { "UnusedParameters" } )
public static void main( String args[] )
{
// Invoke the run method on the Swing event dispatch thread
// Sun now recommends you call ALL your GUI methods on the Swing
// event thread, even the initial setup.
// Could also use invokeAndWait and catch exceptions
SwingUtilities.invokeLater( new Runnable()
{
/**
* } fire up a JFrame on the Swing thread
*/
public void run()
{
out.println( "Starting" );
final JFrame jframe =
new JFrame( TITLE_STRING + " " + VERSION_STRING );
Container contentPane = jframe.getContentPane();
jframe.setSize( width, height );
contentPane.setBackground( Color.YELLOW );
contentPane.setForeground( Color.BLUE );
jframe.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
try
{
out.println( "acquiring URL" );
JEditorPane jep = new JEditorPane( URL );
out.println( "URL acquired" );
JScrollPane jsp =
new JScrollPane( jep,
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
contentPane.add( jsp );
}
catch ( IOException e )
{
err.println( "can't find URL" );
contentPane.add( new JLabel( "can't find URL" ) );
}
jframe.validate();
jframe.setVisible( true );
// Shows page, with HTML comments erroneously displayed.
// The links are not clickable.
}
} );
}// end main
}// end TestHTMLRendering
答案 0 :(得分:3)
在Swing中渲染HTML是有问题的。 Swing组件对HTML有一些原生支持,但它甚至不是HTML4。这是(有限!)HTML 3.2。如果您使用其他桌面库API,则可以获得更好的选择
WebKit for SWT (ver. 0.6) Eclipse Standard Widget Tookit是一个很好的选择。顾名思义,它将WebKit渲染引擎(支持Chrome和Safari)插入SWT;
Netbeans Platform也可能有一些选项。
您可能还想查看Flying Saucer,即:
XML / XHTML / CSS 2.1渲染器
(100%Java)
答案 1 :(得分:2)
@cletus说的都是真的。如果您想通过基于文件的URL获取当前应用,请尝试设置:
URL = "file:///C://print.html"
答案 2 :(得分:2)
您忘记设置JEditorPane的内容类型。
jep.setContentType("text/html");