Tillbaka Java klass för knappar
Ladda ner:  Klassen Koden
Suomenkilinen
Prova programmet genom att:
Användning:
<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:
<applet
Säger att det här kommer en Java Applet
code=mButton.class
namnet på klassen (filen)
name=mButton
namnet på objektet (kan användas för att hänvisa till detta objekt). Har man många knappar i samma dokument kan man använda olika namn på dessa, code är dock alltid samma
width=80
Bildernas bredd
height=50
Bildernas höjd. OBS! Alla tre bilderna bör vara av samma storlek
<param name=up value="fin.gif">
Namnet på den bild som skall användas då musen finns ovanför knappen, men ingen musknapp är nedtryckt
<param name=down value="find.gif">
Namnet på den bild som skall användas då musen finns ovanpå knappen, och man har tryck ner en musknapp. (OBS! i Java 1.02 görs ingen skillnad mellan höger och vänster musknapp)
<param name=idle value="fini.gif">
Namnet på den bild som skall användas då musen inte finns ovanför knappen.
<param name=URL value="http://bet1.puv.fi">
Vart skall vi gå när vi trycker på knappen
<param name=Status value="Samma på Finska!">
Texten för statusraden.
<A HREF="http://bet1.puv.fi"><IMG SRC="fin.gif" ALT="Suomenkilinen" BORDER=0></A>
Bild som skall visas om browsern inte stöder Java, eller har kopplat bort Java
</applet>
Applet beskrivningen avslutas

Hela programkoden
Om du har ett operativsystem som har egna ideer angånde vilka bokstäver som skall vara stora i filnamn så kanske koden måste modifieras. Om klassen heter mButton så måste filen heta mButton.java. Om detta inte går sp måste du buta ut alla förekomster av texetn mButton i såväl HTML som i Java koden. Har du ingen Java kompilator så kan den laddas ner från http://java.sun.com/.
(Får jag be eventuella Java gurun som ser detta att inte skratta. Det är faktiskt bara mitt andra Java program genom tiderna. Kanske jag lär mig någon gång...)
//******************************************************************************
// 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