package org.kde.kjas.server; import java.applet.Applet; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Image; import java.awt.LayoutManager; import java.awt.Panel; import java.net.URL; /** * @author till * * A panel which embeds the applet and shows some * information during class loading. */ public class KJASAppletPanel extends javax.swing.JPanel implements StatusListener { private final static int LOADING = 1; private final static int RUNNING = 2; private final static int FAILED = 3; private Image load_img = null; private Image fail_img = null; private int status = LOADING; private Font font; private String msg = "Loading Applet..."; /** * Constructor for KJASAppletPanel. */ public KJASAppletPanel() { super(new BorderLayout()); font = new Font("SansSerif", Font.PLAIN, 10); URL url = getClass().getClassLoader().getResource("images/animbean.gif"); load_img = getToolkit().createImage(url); //setBackground(Color.white); } void setApplet(Applet applet) { add("Center", applet); validate(); } public void showStatus(String msg) { this.msg = msg; if (status != RUNNING) repaint(); } public void paint(Graphics g) { super.paint(g); if (status == RUNNING) return; Image img = (status == LOADING ? load_img : fail_img); int x = getWidth() / 2; int y = getHeight() / 2; if (img != null) { //synchronized (img) { int w = img.getWidth(this); int h = img.getHeight(this); int imgx = x - w / 2; int imgy = y - h / 2; //g.setClip(imgx, imgy, w, h); g.drawImage(img, imgx, imgy, this); y += img.getHeight(this) / 2; //} } if (msg != null) { //synchronized(msg) { g.setFont(font); FontMetrics m = g.getFontMetrics(); int h = m.getHeight(); int w = m.stringWidth(msg); int msgx = x - w / 2; int msgy = y + h; //g.setClip(0, y, getWidth(), h); g.drawString(msg, msgx, msgy); //} } } void showFailed() { URL url = getClass().getClassLoader().getResource("images/brokenbean.gif"); fail_img = getToolkit().createImage(url); status = FAILED; msg = "Applet Failed."; repaint(); } void showFailed(String message) { showFailed(); showStatus(message); } public void stopAnimation() { status = RUNNING; } public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h) { if (img != null && img == load_img && status != LOADING) { img.flush(); load_img = null; Main.debug("flushing image"); return false; } return super.imageUpdate(img, flags, x, y, w, h); } }