/*
* Copyright ( c ) 1998 , 2011 , Oracle and / or its affiliates . All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
*
* - Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
*
* - Redistributions in binary form must reproduce the above copyright
* notice , this list of conditions and the following disclaimer in the
* documentation and / or other materials provided with the distribution .
*
* - Neither the name of Oracle nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS " AS
* IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT LIMITED TO ,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL , SPECIAL ,
* EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT LIMITED TO ,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE , DATA , OR
* PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT ( INCLUDING
* NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*/
/*
* This source code is provided to illustrate the usage of a given feature
* or technique and has been deliberately simplified . Additional steps
* required for a production - quality application , such as security checks ,
* input validation and proper error handling , might not be present in
* this sample code .
*/
import javax.swing.*;
import java.awt.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.*;
import javax.swing.text.*;
import javax.swing.event.*;
/**
* @ author Steve Wilson
* @ author Alexander Kouznetsov
*/
@SuppressWarnings("serial" )
public class MetalworksHelp extends JInternalFrame {
public MetalworksHelp() {
super ("Help" , true , true , true , true );
setFrameIcon((Icon) UIManager.get("Tree.openIcon" )); // PENDING(steve) need more general place to get this icon
setBounds(200 , 25 , 400 , 400 );
HtmlPane html = new HtmlPane();
setContentPane(html);
}
}
@SuppressWarnings("serial" )
class HtmlPane extends JScrollPane implements HyperlinkListener {
JEditorPane html;
@SuppressWarnings("LeakingThisInConstructor" )
public HtmlPane() {
try {
URL url = getClass().getResource("/resources/HelpFiles/toc.html" );
html = new JEditorPane(url);
html.setEditable(false );
html.addHyperlinkListener(this );
html.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES,
Boolean .TRUE );
JViewport vp = getViewport();
vp.add(html);
} catch (MalformedURLException e) {
System.out.println("Malformed URL: " + e);
} catch (IOException e) {
System.out.println("IOException: " + e);
}
}
/**
* Notification of a change relative to a
* hyperlink .
*/
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
linkActivated(e.getURL());
}
}
/**
* Follows the reference in an
* link . The given url is the requested reference .
* By default this calls < a href = " # setPage " > setPage < / a > ,
* and if an exception is thrown the original previous
* document is restored and a beep sounded . If an
* attempt was made to follow a link , but it represented
* a malformed url , this method will be called with a
* null argument .
*
* @ param u the URL to follow
*/
protected void linkActivated(URL u) {
Cursor c = html.getCursor();
Cursor waitCursor = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
html.setCursor(waitCursor);
SwingUtilities.invokeLater(new PageLoader(u, c));
}
/**
* temporary class that loads synchronously ( although
* later than the request so that a cursor change
* can be done ) .
*/
class PageLoader implements Runnable {
PageLoader(URL u, Cursor c) {
url = u;
cursor = c;
}
public void run() {
if (url == null ) {
// restore the original cursor
html.setCursor(cursor);
// PENDING(prinz) remove this hack when
// automatic validation is activated.
Container parent = html.getParent();
parent.repaint();
} else {
Document doc = html.getDocument();
try {
html.setPage(url);
} catch (IOException ioe) {
html.setDocument(doc);
getToolkit().beep();
} finally {
// schedule the cursor to revert after
// the paint has happended.
url = null ;
SwingUtilities.invokeLater(this );
}
}
}
URL url;
Cursor cursor;
}
}
Messung V0.5 in Prozent C=93 H=100 G=96
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-02)
¤
*© Formatika GbR, Deutschland