Avatar billede ismand Nybegynder
17. maj 1999 - 23:27 Der er 7 kommentarer og
1 løsning

Baggrounds farven i applets

Hvordan ændrer jeg baggrundsfarven i en applet?
Avatar billede thoeger Nybegynder
18. maj 1999 - 08:39 #1
Her direkte taget fra www.netcoders.dk

Her er et lille trick, hvis du er træt af at se på den kedelige grå kasse, som 9 ud af 10 applets viser, mens de bliver initialiseret! - Dette er oftest et resultat af, at disse applet's loader en betydelig mængde grafik i initialiserings fasen.

Men for at undgå dette, er fidusen at man IKKE venter på at alt grafikken bliver loadet i Init() funktionen af appletten... Normalt ventes der med kaldet MediaTracker.waitForAll(), men da dette er et blokerende kald, stoppes initiliseringen af applet'en, indtil alt grafikken er blevet loadet!! - Derfor skal denne udelades, og til gengæld skal der indføres nogle status check på MediaTrackeren i applet'ens run() loop!

Indtil den nødvendige grafik er blevet loadet, vises en custom besked, for at informere brugeren om, at der loades grafik. I nedenstående er dette en simpel tekst streng, men dette kunne evt. udvides med en grafisk "progress" indikator, så brugeren kan se, hvor langt appleten er i forløbet!

Nedenstående er mit simple eksempel, som illusterer en af løsningerne på ovenstående problem :



// killGreyBox.java (oversat med Microsoft Visual J++ 1.1 )
//
// Udviklet af Kent Fonager, 29. September 1998
// Email : kent@netcoders.dk

import java.applet.*;
import java.awt.*;
import java.net.*;

public class killGreyBox extends Applet implements Runnable
{
  // medlems variable
  private Thread    thread        = null; 
  private Image        m_image0;
  private Image        m_image1;
  private Image        m_image2;
  private Image        m_image3;
  private boolean    m_loaded    = false;
  private String    m_message    = "";
  private MediaTracker    m_mt;

  public void init()
  {
    super.init();

    // initializer strengene med filnavnene, på de filer som ønskes loadet
    String gif0 = this.getCodeBase().toString() + "image0.jpg";
    String gif1 = this.getCodeBase().toString() + "image1.jpg";
    String gif2 = this.getCodeBase().toString() + "image2.jpg";
    String gif3 = this.getCodeBase().toString() + "image3.jpg";

    // custom message, som skal vises, mens der loades grafik
    m_message = "Loader grafik...";

    // initialiser image objekterne
    try
    {
      m_image0 = this.getImage( new URL( gif0 ) );
      m_image1 = this.getImage( new URL( gif1 ) );
      m_image2 = this.getImage( new URL( gif2 ) );
      m_image3 = this.getImage( new URL( gif3 ) );
    }
    catch (MalformedURLException e)
    {
      // udskriv fejlmeddelelse
      System.out.println("Exception e : " + e.toString() );
    }

    // instantier MediaTracker
    m_mt = new MediaTracker( this );

    // tilføj de fire forskellige images til MediaTrackeren
    m_mt.addImage( m_image0, 1 );
    m_mt.addImage( m_image1, 1 );
    m_mt.addImage( m_image2, 1 );
    m_mt.addImage( m_image3, 1 );
   
    // start applet'en i egen tråd
    thread = new Thread(this);
    thread.start();
  } 
 
  public void paint( Graphics g )
  {   
    // hvis alle images er loaded, så vis det første image
    if ( m_loaded )
    {
      g.drawImage( m_image0, 0, 0, this );
    }
    else // ellers udskriv custom message
    {
      g.setColor( Color.white );
      g.fillRect( 0, 0, this.size().width, this.size().height );
      g.setColor( Color.black );
      g.setFont( new Font( "Arial", Font.BOLD, 14 ) );
      g.drawString( m_message, 10, 20);
    }
  }
 
  public void run()
  {
    try
    { 
      // kald paint() funktionen
      paint( this.getGraphics() );
     
      // mens alle images endnu ikke er loadet, ændres custom message
      // og tråden venter 500ms
      while( m_mt.statusAll( true ) != MediaTracker.COMPLETE )
      {
        m_message += ".";
        paint( this.getGraphics() );
        thread.sleep( 500 );
      }
    }
    catch (InterruptedException e) { }
    finally
    {
      // set load flag til true og redraw applet'en
      m_loaded = true;
      paint(this.getGraphics());
    }
  }
}
   




Jeg håber at ovenstående kan inspirere til lidt udbygning af måske allerede eksisterende applet's, men samtidig øge lysten til at udforske MediaTrackeren, som er rimelig central, når der skal loades grafik fra en Java applet.
Avatar billede ismand Nybegynder
18. maj 1999 - 17:08 #2
Ja Det er faktisk en meget fin ting! - Og jeg har allerede læst den! - men det jeg mener er... Findes der ikke en funktion der hedder SetBackgroundColor ?!!?!?

Jeg har ikke kunnet finde den i den java bog jeg har selv... måske du kan hjælpe mig med at finde den? - så er får du pointsne
Avatar billede thoeger Nybegynder
19. maj 1999 - 23:01 #3
okay jeg leder!!!
Avatar billede fey.dk Nybegynder
03. juni 1999 - 14:20 #4
Det gøres ganske nemt:

setBackground(Color.white);

for at sætte baggrundsfarven til hvid på det pågældende objekt (applet).
Avatar billede ismand Nybegynder
03. juni 1999 - 15:06 #5
Fey.dk - jeg vil bede dig skrive det som et svar så jeg kan tildele dig pointene...
Avatar billede fey.dk Nybegynder
03. juni 1999 - 15:22 #6
Som svar? Okay, jeg er lige ny her.. hvordan gør man det? (spørger jeg dumt? ;o)
Avatar billede ismand Nybegynder
04. juni 1999 - 11:35 #7
Det gør du ved siden af tekstboxen såvidt jeg ved.
Avatar billede fey.dk Nybegynder
04. juni 1999 - 11:57 #8
Det har jeg også i mellemtiden fundet ud af, men det kræver jo lissom at du afviser det første svar..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester