//****************************************************************************** // mButton.java: Applet // Observera att filen måste heta mButton.java (med stort B) //****************************************************************************** import java.applet.*; // För applet hantering import java.awt.*; // För grafikanteringen import java.net.*; // För URL hanteringen //============================================================================== // Main Class for applet mButton // Jag hade en bra orsak till varför jag kallade klassen för mButton // men den har jag glömt - konstigt namn... //============================================================================== public class mButton extends Applet { // Några flaggor private boolean m_bAllLoaded = false; private boolean m_bOnButton = false; private boolean m_bStillDown = false; // Variabler för de olika bilderna som behövs Image m_imageUp; Image m_imageDn; Image m_imageIdle; Image m_imageCurrent; // Variabler för de parametrarna som getts åt programmet private String m_sUp = ""; private String m_sDown = ""; private String m_sIdle = ""; private String m_sURL = ""; private String m_sStatus = ""; // Används för hantering av parametrarna private final String PARAM_sUp = "up"; private final String PARAM_sDown = "down"; private final String PARAM_sIdle = "idle"; private final String PARAM_sURL = "URL"; private final String PARAM_sStatus = "Status"; //-------------------------------------------------------------------------- // Allmän info om programmet. //-------------------------------------------------------------------------- public String getAppletInfo() { return "Name: mButton\r\n" + "Author: Anders Enges\r\n"; } //-------------------------------------------------------------------------- // Info om de paramtrar som kan ges. //-------------------------------------------------------------------------- public String[][] getParameterInfo() { String[][] info = { { PARAM_sUp, "String", "Picture for Mouse Over" }, { PARAM_sDown, "String", "Picture for Pressed" }, { PARAM_sIdle, "String", "Picture for idle" }, { PARAM_sURL, "String", "URL to jump to" }, { PARAM_sStatus, "String", "Status text" }, }; return info; } //-------------------------------------------------------------------------- // Detta körs första gången Appleten laddas. //-------------------------------------------------------------------------- public void init() { String m_sParam; MediaTracker tracker = new MediaTracker(this); // Vi kollar en parameter åt gången. m_sParam = getParameter(PARAM_sUp); if (m_sParam != null) m_sUp = m_sParam; m_sParam = getParameter(PARAM_sDown); if (m_sParam != null) m_sDown = m_sParam; m_sParam = getParameter(PARAM_sIdle); if (m_sParam != null) m_sIdle = m_sParam; m_sParam = getParameter(PARAM_sURL); if (m_sParam != null) m_sURL = m_sParam; m_sParam = getParameter(PARAM_sStatus); if (m_sParam != null) m_sStatus = m_sParam; // Läs in bilderna till programmet. m_imageUp = getImage(getDocumentBase(), m_sUp); // Programmet fortsätter fast bilden ännu inte är fullt inläst. // Därför behöver vi en koll på när de är färdigt inlästa. tracker.addImage(m_imageUp, 0); m_imageDn = getImage(getDocumentBase(), m_sDown); tracker.addImage(m_imageDn, 0); m_imageIdle = getImage(getDocumentBase(), m_sIdle); tracker.addImage(m_imageIdle, 0); m_imageCurrent = getImage(getDocumentBase(), m_sIdle); tracker.addImage(m_imageCurrent, 0); try { // Vänta tills alla bilder är inlästa. tracker.waitForAll(); m_bAllLoaded = !tracker.isErrorAny(); } catch (InterruptedException e) { // Borde väl egentligen ha någon slags felhantering här. } m_bAllLoaded = true; } //-------------------------------------------------------------------------- // Generell ritfunktion. Observera att m_imageCurrent variabelns innehåll variarar //-------------------------------------------------------------------------- public void paint(Graphics g) { g.drawImage(m_imageCurrent, 0, 0, null); } //-------------------------------------------------------------------------- // Vi har använt musknappen //-------------------------------------------------------------------------- public boolean mouseDown(Event evt, int x, int y) { // Kom ihåg att knappen nu är nere m_bStillDown = true; // Och vi är på en knapp m_bOnButton = true; // Se till att rätt bild används m_imageCurrent = m_imageDn; repaint(); return true; } //-------------------------------------------------------------------------- // Vi har släppt musknappen //-------------------------------------------------------------------------- public boolean mouseUp(Event evt, int x, int y) { // Vi måste kolla att vi finns på en knapp if (m_bStillDown && m_bOnButton) { // Se till att rätt bild används m_imageCurrent = m_imageUp; // Se till bilden ritas om av paint funktionen repaint(); // Förök hoppa till vald URL // Men skapa för et URL URL m_URLjump; try { // Försöker skapa en URL m_URLjump = new URL(getDocumentBase(), m_sURL); } catch (MalformedURLException e) { // Hit kommer vi om URL som getts inte är en URL. // En diskret varning och gör ingenting för övrigt getAppletContext().showStatus(e.toString()); m_bStillDown = false; m_bOnButton = false; return false; } // Hoppa till vald URL getAppletContext().showDocument(m_URLjump); } // Knappen är alltså inte längre nedtryckt m_bStillDown = false; m_bOnButton = false; return true; } //-------------------------------------------------------------------------- // Vi för muskmarkören över en knapp //-------------------------------------------------------------------------- public boolean mouseEnter(Event evt, int x, int y) { m_bOnButton = true; // Om vi hade tryckt på knappen, flyttat bort musmarkören // och flyttar tillbaka vill jag att den skall minnas att // den är nedtryckt if (m_bStillDown) m_imageCurrent = m_imageDn; else m_imageCurrent = m_imageUp; getAppletContext().showStatus(m_sStatus); repaint(); return true; } //-------------------------------------------------------------------------- // Vi för bort muskmarkören från en knapp //-------------------------------------------------------------------------- public boolean mouseExit(Event evt, int x, int y) { // Vi finns alltså inte på en knapp mera m_bOnButton = false; m_imageCurrent = m_imageIdle; getAppletContext().showStatus(null); repaint(); return true; } }