 Java klass för knappar
Java klass för knappar<applet code=mButton.class name=mButton width=80 height=50> <param name=up value="fin.gif"> <param name=down value="find.gif"> <param name=idle value="fini.gif"> <param name=URL value="http://bet1.puv.fi"> <param name=Status value="Samma på Finska!"> <A HREF="http://bet1.puv.fi"><IMG SRC="fin.gif" ALT="Suomenkilinen" BORDER=0></A> </applet>Förklaringar:
//******************************************************************************
// 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;
    }
}
© 1997 Anders Enges
Vasa institut för företagsekonomi och hotellverksamhet
Utbildningsenheten för företagsekonomi