[java] waarom tekent ie wel na klikken op draw

Pagina: 1
Acties:

  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 11-07 22:38
waarom tekent de applet bij het opstarten geen dots (g=nul in testPanel class na panel.getGraphics()) en bij het klikken op draw wel??
voor verduidelijking kijk even naar de onderstaande code

De testPanel class
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.awt.*;
import javax.swing.*;
public class testPanel
{
  private static final int LEN = 200;

  private JPanel panel;
  private int nDots;
  private int firstRed = 0;

  public testPanel(JPanel canv, int dots)
  {
    panel = canv;
    nDots = dots;
  }


  public void draw()
  {
    Graphics g = panel.getGraphics();
    System.out.println(panel.getGraphics());

    if(g!=null)
    {
    for(int nDrawn = 0; nDrawn < nDots; nDrawn++)
    {
      int x = (int)(Math.random()*LEN);
      int y = (int)(Math.random()*LEN);
      g.fillOval(x,y,3,3);

      if(Math.random() < 0.001)
      {
        g.setColor(Color.red);
        firstRed = nDrawn;
      }
    }

    }
  }
}

De Applet class
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class testApplet extends JApplet implements ActionListener
{
  private final int NDOTS = 10000;
  private JPanel test = new JPanel();
  private testPanel panel;
  private Button draw = new Button("Draw");

  public void init()
  {
    this.getContentPane().setLayout(null);
    draw.setBounds(210,10,100,20);
    draw.addActionListener(this);
    this.getContentPane().add(draw);
  //  test.setBorder(BorderFactory.createTitledBorder("Drawing panel"));
    test.setBounds(10,10,200,200);
    panel = new testPanel(test,NDOTS);
    panel.draw();

    this.getContentPane().add(test);
  }

  public void actionPerformed(ActionEvent e)
  {
    if(e.getSource()== draw)
    {
    panel = new testPanel(test, NDOTS);
    panel.draw();
    }
  }
}

voorbeeld uit JAVA, JAVA, JAVA
kan alleen niet vinden waarom hij wel tekent na klikken op draw en niet bij opstarten. (staat ook niet uitgelegt in het boek. bij starten zelf ingevoegd)

  • Skinkie
  • Registratie: Juni 2001
  • Laatst online: 09-06-2020

Skinkie

Op naar de 500

zonder naar je code gekeken te hebben:

misschien moet je um nog repainten?

Steun Elkaar, Kopieer Nederlands Waar!


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

is het niet een versie probleem? welke versie staat in je boek en welke versie heb je thuis?

Doet iets met Cloud (MS/IBM)


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
In je Init is de Graphics van je JApplet/JPanel nog niet beschikbaar. Die is pas beschikbaar als de boel gepainted is.

Dat ie wel beschikbaar is in public boolean action is dan ook niet vreemd. Immers jij kan pas die actie generen als iemand op die knop gedrukt heeft, en daarvoor moet ie hem eerst zien toch ?

Maar waarom gebruik je een public boolean action( Event e, Object o ). Dat is echt ontzettend achterhaald :) Kijk eens even naar de interface ActionListener en eigenlijk alle xxxListener interfaces die tegenwoordig gebruikt worden om events te verwerken

Ook is het misschien slim om te kiezen voor goede variabele namen. LEN is geen duidelijke naam: Bedoel je lengte of is het Lente, ik noem maar wat. Schrijf ook gewoon veel commentaar in je code :) Dat maakt het ook duidelijker voor ons.

Laatste punt: Java Java Java is een schoolboek neem ik aan, en dat is waarschijnlijk ook de reden dat je 3.5 gebruikt. Wil je proberen iets meer op je school te vragen en iets minder hier, of na intensief zoekwerk (ook je leraar dus). Ik heb de laatste dagen 3 Java topics van je gezien en ze zijn nogal basic nl.

Dat jij nog geen ster programmeur bent (wie is dat wel :) ) is helemaal niet erg of problematisch, maar probeer gewoon niet voor elk wissewasje een topic te openen. Zo houden we het niveau hier hoog en wordt veel kennis aangetrokken, waar ook jij van profiteerd.

Succes nog verder

[edit]Ik heb hier inderdaad wel eens over gehoord bij 3.5 dat in de init() graphics niet beschikbaar is, maar dat lijkt me juist nogal logisch :)
Topicstarter: Download gewoon even JBuilder 7 van de site. http://www.borland.com/jbuilder

  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 11-07 22:38
gewoon de versie die bij het boek zat dus daar kan het niet aan liggen
maar hij doet het ook wel zoals in het boek staat
na het drukken op de knop
ik heb er zelf alleen 1 of 2 regels aan het einde van de init aan toegevoegd. maar die doen zo te zien niks. hoe kan het dat het nu wel werkt na het drukken op de knop en niet aan het einde van de init?

en helemaal aan het einde nog een keer repaint() zetten helpt ook niet.

  • dexter07051982
  • Registratie: November 2001
  • Laatst online: 11-07 22:38
Op woensdag 19 juni 2002 20:52 schreef Glimi het volgende:
In je Init is de Graphics van je JApplet/JPanel nog niet beschikbaar. Die is pas beschikbaar als de boel gepainted is.
ja oke maar aan het einde van de init is ie toch getekend (gepainted), of zit ik hiermee helemaal verkeerd?
Maar waarom gebruik je een public boolean action( Event e, Object o ). Dat is echt ontzettend achterhaald :) Kijk eens even naar de interface ActionListener en eigenlijk alle xxxListener interfaces die tegenwoordig gebruikt worden om events te verwerken
wat bedoel je precies want ik ben nog maar een beginner ja en in het boek gebruiken ze ook iedere keer een actionListener en doe ze het op deze manier. Ook van de leraar moet het zo, tenminste heb nog niet een andere manier van hem gehoord.
Laatste punt: Java Java Java is een schoolboek neem ik aan, en dat is waarschijnlijk ook de reden dat je 3.5 gebruikt. Wil je proberen iets meer op je school te vragen en iets minder hier, of na intensief zoekwerk (ook je leraar dus). Ik heb de laatste dagen 3 Java topics van je gezien en ze zijn nogal basic nl.
zoals ik hiervoor al zei ben ik dus nog maar een beginner. en ja, Java, Java, Java is een schoolboek.
en waarom ik dit niet op school vraag?
nou om meerdere redenen.

1. De leraar is ongeveer tegelijk met ons met java begonnen en weet er zelf ook nog zo goed als niks van. Ja van de opdrachten die hij moet beoordelen weet hij het wel maar dan houd het op.

2. Ik mag die kerel niet zo. (Hij denkt altijd dat hij het weet maar als je dat dan doet dan krijg je een errors van hier tot tokio)(tevens heeft hij op een "goed" programma nog altijd wel wat aan te merken waarvoor je dan een week later nog een keer terug moet komen en als je dat dan zo hebt verandert is het weer niet goed maar was het vorige toch beter.)

3. Dit is niet gewoon een opdracht maar een eindproject van school waarvan die vent dus weer bijna niks kan uitleggen.

dus vandaar

Edit: even de quote-tags aangepast.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 04-09 23:45
Op woensdag 19 juni 2002 20:52 schreef Glimi onder een hele hoop behulpzame tekst het volgende:
Topicstarter: Download gewoon even JBuilder 7 van de site. http://www.borland.com/jbuilder
[enigszins-ot]
JBuilder 7 zie ik nog niet staan on het lijstje trialversies hoor :? Wel bij keys only maar die moet ik niet hebben :(
[/enigszins-ot]

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Het antwoord stond al in je andere topic, wat gesloten is...
rwb: Als de peer van een component nog niet aangemaakt is( dus normaal gesproken als het nog niet zichtbaar is op het scherm ) dan heeft het component nog geen graphics object.
API docs van getGraphics:
Creates a graphics context for this component. This method will return null if this component is currently not displayable.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Op woensdag 19 juni 2002 21:11 schreef dexter07051982 het volgende:
ja oke maar aan het einde van de init is ie toch getekend (gepainted), of zit ik hiermee helemaal verkeerd?
Dat zie je verkeerd dacht ik. Na de init() wordt paintComponent( ) aangeroepen die de boel gaat tekenen.
wat bedoel je precies want ik ben nog maar een beginner ja en in het boek gebruiken ze ook iedere keer een actionListener en doe ze het op deze manier. Ook van de leraar moet het zo, tenminste heb nog niet een andere manier van hem gehoord.
http://java.sun.com/docs/books/tutorial/uiswing/events/intro.html
(samenvattend het standaardverhaal over docenten :+ )
Sorry maar niet de hele wereld bestaat uit je school hoor. De meesten hier zijn zover gekomen dmv zelfstudie en interesse. Op school leer je een denkwijze en enkele concepten. Het verdiepen en uitwerken doe je echt zelf.

Als je dus geen zin hebt in die docent, neem dan dit even door:
http://java.sun.com/docs/books/tutorial/uiswing/index.html
Pagina: 1