En Editor som inte kan lagra (men som kan vara färggrann)
Provkör klassen
Tema:
- En hel del
ColorEditor.java
Skapa en fil med namnet ColorEditor.java och sätt in följande kod:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
// en klass som bygger på en Choice och som hanterar
// (några) färger
class ColorChoice extends Choice
{
    // konstruerare - sätter dit några färgnamn
    public ColorChoice()
    {
        this.add("Röd");
        this.add("Grön");
        this.add("Blå");
    }
    // något överförenklad funktion 
    public Color getColor()
    {
        // kollar vilken rad som är vald i Choicen
        switch( this.getSelectedIndex() )
        {
            // valde vi första färgen så returnerar vi en röd färg
        case 0:
            return new Color(255,0,0);
        case 1:
            return new Color(0,192,0);
        case 2:
            return new Color(0,0,255);
        default:
            return new Color(0,0,0);
        }
    }
    // följande två funktioner väljer vilken rad som skall vara
    // vald i Chioicen. relativt onödiga eftersom 
    // select gör samma sak, men jag ville bara vias att
    // man kan skapa flera funktioner med olika parametrar
    public void setColor(String colorname)
    {
        this.select(colorname); 
    }
    public void setColor(int colorindex)
    {
        this.select(colorindex);    
    }
}
// en klass som visar typsnittsnamnen
class FontChoice extends Choice
{
    // konstruerare
    public FontChoice()
    {
        // använd javas Toolkit för att kolla vilka typsnitt som 
        // finns. dess läggs in i en String array
        String fonts[]  = this.getToolkit().getFontList();
        // loopar igen om denna array och sätter in värdena i Choicen
        for( int i = 0; i < fonts.length ; i++)
            this.add( fonts[i] );
    }
    
    // enkel kapsling
    public String getFontName()
    {
        return this.getSelectedItem();
    }
}
// en klass för typsnitssstorlekar
class FontSizeChoice extends Choice
{
    // konstruerar utan parameter
    public FontSizeChoice()
    {   
        // sätt in typsnitten från 8 till 72 med 2 stegs intervall
        for (int i = 8; i <= 72; i = i +2)
            this.add( "" + i );
        
        // välj 12 punkters storlek
        this.select(2);
    }
    // konstruerar med två parametrar
    public FontSizeChoice(int start, int stop)
    {
        // sätt in typsnitten från start till stop med 2 stegs intervall
        for (int i = start; i <= stop; i = i +2)
            this.add( "" + i );
    }   
    
    // returnerar typsnittsstorleken konverterad från en String till
    // en vanlig int
    public int getFontSize()
    {
        return Integer.parseInt( this.getSelectedItem() );
    }
}
// själva Appleten
public class ColorEditor extends Applet 
    implements ItemListener // skall lyssna på Choice och Checkbox
{
    //skapa en FontChoice - egendefinierad klass
    FontChoice font = new FontChoice();
    
    //skapa en FontSizeChoice - egendefinierad klass
    // se till att vi har från 10 till 26 punkter
    FontSizeChoice size = new FontSizeChoice(10,36);
    
    // skapa två stycken ColorChoice - egendefinierad klass
    ColorChoice color = new ColorChoice();
    ColorChoice color2 = new ColorChoice();
    
    // Skapa några Checkboxar
    Checkbox bold = new Checkbox("Bold");
    Checkbox italic = new Checkbox("Italic");
    
    // och en TextArea för texten
    TextArea texten = new TextArea();
    
    // En statuslabel
    Label status = new Label("Ready");
    // eftersom vi behöver göra ungefär samma sak när vi initierar 
    // appleten som när någon händelse sker, är det enklast att
    // sätta denna hantering i en separat funktion
    private void justDoIt()
    {
        String fontName;
        int storlek = size.getFontSize();
        int fontStyle = 0;
        // kolla vilket typsnitt som är valt i FontChoicen
        fontName = font.getFontName();
        
        // kolla om bold Chekbocen är "kruxad"
        // och se i så fall till att fontStyle även är bold
        if ( bold.getState() )
            fontStyle = fontStyle + Font.BOLD;
        
        // gör samma med italic Checkboxen
        if ( italic.getState() )
            fontStyle = fontStyle + Font.ITALIC;
        
        // vi har tillräckligt mycket information för att kunna
        // skapa en Font
        texten.setFont( new Font(fontName,fontStyle,storlek) );     
        
        // sätter förgrunden till den ena ColorChoicens färg
        texten.setForeground(color.getColor());
        
        // och bakrunden till den andras
        texten.setBackground(color2.getColor());
    }
    
    public void itemStateChanged(ItemEvent e)
    {
        // kör bara funktionen justDoIt
        // vi behöver inte kolla vilken komponent som "triggade"
        // händelsen
        justDoIt();
    }
    
    // kösr när Appleten startar
    public void init()
    {   
        // sätt några basvärden för Choicarna
        color.setColor("Blå");
        color2.setColor(1);
        
        // lite färger skadar alldrig
        this.setBackground(new Color(192,192,192));
        
        // en BorderLayout verkar lämplig
        BorderLayout border = new BorderLayout();
        
        // men för en "toolbar" kanske FlowLayout funkar bättre
        FlowLayout flow = new FlowLayout();
        // sätt vänsterjustering på flow
        flow.setAlignment( FlowLayout.LEFT );
        
        // skapa en Panel med FlowLayouten
        Panel panel = new Panel(flow);
        
        // och sätt dit alla Choice och Checkboxar
        panel.add(font);
        panel.add(size);
        panel.add(bold);
        panel.add(italic);
        panel.add(color);
        panel.add(color2);
        
        // se till att Appletten har en BorderLayout
        this.setLayout(border);
        
        // sätt "toolbar" panelen längst upp
        this.add("North", panel);
        
        // sätt TextArean i mitten
        this.add("Center", texten );
        
        // och en statusrad längst ner
        this.add("South", status);
        
        // se till att vi lysnnar på de händelser som sker
        font.addItemListener( this );
        size.addItemListener( this );
        bold.addItemListener( this );
        italic.addItemListener( this );
        color.addItemListener( this );
        color2.addItemListener( this );
        
        // kör justDoIT funktionen för att se till att 
        // färger mm. är korrekta
        justDoIt();
        
        // sätt fokus till TextArean
        texten.requestFocus();
    }
}