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();
}
}