Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Mahlzeit!

Hat jemand en heissen Tipp für einen Java-Newbie, wie ers denn bitteschön hinkriegt, dass die Kreise konzentrisch aufgehen und nicht die Koordinaten des alten Kreises hernehmen...?

Der Code:

import java.applet.Applet;

import java.awt.*;

import java.util.Date;

public class CKreise extends Applet{

public void warten(){

long lStart, lJetzt, lZeit = 500;

lStart =(new Date()).getTime();

lJetzt = lStart;

while((lJetzt - lStart) < lZeit){

lJetzt = (new Date()).getTime();

}

}

public void paint (Graphics gc)

{

int i, xPos, yPos, n, m;

xPos=130;

yPos=95;

n=5;

m=5;

Font fntFont1 = new Font ("Arial", Font.BOLD, 18);

setBackground(new Color(0x00FF00));

for (xPos=130;xPos>=80;xPos--)

{

yPos=yPos+1;

m+=1;

n+=1;

gc.setColor(Color.red);

gc.fillOval(xPos, yPos, m, n);

gc.setColor(Color.red);

warten();

}

gc.setFont(fntFont1);

gc.setColor(new Color(0xAAFFDD));

gc.drawString("Hallo Welt!",85,100);

}

}

Dankeschee fürs Lesen

  • Autor

Also folgendes: das hier war die Aufgabe einer Klassenarbeit.

Schreibe ein Applet mit grünem Hintergrund; irgendwo darin erwächst ein roter Kreis zeitgesteuert, welcher von immer weiteren roten konzentrischen Kreisen "übermalt" wird. Der große Kreis am Schluss bleibt stehen und es erscheint in der Mitte desselben der Schriftzug Hallo Welt in der Hintergrundfarbe des Applets....

Sieht aus wie ne Schulaufgabe...

Ich hatte das Problem als ich ein kleines Grafikprogramm-Applet geschrieben hatte, dass sich die Kreise nicht konzentrisch öffneten. Du musst den Startpunkt des Kreises jedes mal neu berechnen, wobei er mittelpunkt - kreisumfang/2 ist.

Ah, da hat sich was überschnitten. ;)

Ich weiß ehrlich gesagt nicht, wo (Berufschul)-Leher Java gelernt haben, scheint aber immer dieselbe Denkfabrik zu sein. Ein Wort zu paint() und Applets:

Will man eine Animation in einem Applet machen, sollte man auf jeden Fall unterlassen soetwas wie for() in der paint()-Methode einzusetzen. Grund 1: Sieht sch...lecht aus. Grund 2: Wärend die sch...öne Animation arbeitet kann man sonst nix machen. Grund 3: Ja, jetzt versuch aber mal bitte mehrere Animationen, die unterschiedlich, interaktiv und sonstwas sind.

Tu deinem Lehrer nen Gefallen und liess dir mal GoTo Java2 durch (www.javabuch.de). Dort ist auch das Prinzip des Doppelbuffering erklärt. Das hat meinen Lehrer sehr interessiert - davon hat er auch nie was gehört.

Ganz ausgefeilt gehts dann auch noch, dass die update()-Methode intelligent auswertet, ob alles oder nur teilweise der Bildschirm aktualisiert werden muss.

Hoffe, es hilft. :)

  • Autor

Ich danke Euch Programmier-Göttern!!!

@shark: klar isses ne Schulaufgabe und klar: dieses warten()-TEil hat der Lehrer auch selbst irgendwo abgekäst, weil er diese Zeitverzögerung niemals aufs Ei gekriegt hätte.

Uns SI'ler kommt das alles recht spanisch vor, wir haben keinen einzigen halbwegs bewanderten Programmierer in der Klasse, Lehrer eingeschlossen. ich werd das, was du zu Applets und paint() gesagt hast aber dennoch beherzigen, falls ich mal in die Verlegenheit kommen sollte, Interaktives zu programmieren (interessant isses ja, aber ein Königreich für mehr Zeit....)

@klotzkopp: nochmals thx

@pepper

Unabhängig zur Kritik von shark007 sind die Schleifenparameter meiner Meinung nach falsch, du solltest hier nicht den xPos-Wert für den Kreis nehmen. Ich habe den Code etwas umgeschrieben (die Änderungen sind rot) und den Wert für lZeit auf 30 statt auf 500 gesetzt, dann geht es etwas schneller:

public void paint (Graphics gc) 
{
int i, xPos, yPos, [color=red]MxPos, MyPos,[/color] n, m;
[color=red]MxPos=130;
MyPos=95;[/color]
n=1;
m=1;


Font fntFont1 = new Font ("Arial", Font.BOLD, 18);

setBackground(new Color(0x00FF00));

[color=red]for (i=1;i<=50;i++) [/color]
{
m+=2;
n+=2;
[color=red]xPos=MxPos-m/2;
yPos=MyPos-n/2; [/color]
gc.setColor(Color.red);
gc.fillOval(xPos, yPos, m, n);
gc.setColor(Color.red);
warten();
}
[/php]

Manne :cool:

@pepper

sorry hat irgendwie nicht geklappt, hier noch einmal:

public void paint (Graphics gc)

{

int i, xPos, yPos, MxPos, MyPos, n, m;

MxPos=130;

MyPos=95;

n=1;

m=1;

Font fntFont1 = new Font ("Arial", Font.BOLD, 18);

setBackground(new Color(0x00FF00));

for (i=1;i<=50;i++)

{

m+=2;

n+=2;

xPos=MxPos-m/2;

yPos=MyPos-n/2;

gc.setColor(Color.red);

gc.fillOval(xPos, yPos, m, n);

gc.setColor(Color.red);

warten();

}

Manne :cool:

@Manne: Meine Kritik war nur gegen Berufschullehrer, nicht böse sein also! :)

Im Prinzip hatte ich genau das im Sinn als ich "mittelpunkt - kreisumfang/2" schrieb (vergl: xPos=MxPos-m/2; ).

Ciao :OD ,

Florian

  • Autor

@ Manne.

Danke auch Dir. Ich werd die Änderungen beherzigen. Übrigens: diese Zeitsteuerungsmethode mit dem Wert 500 war für uns vorgegeben, weil wir ja so was noch nicht können :(

Aber shark und Du habt recht, was Ihr als falsch angekreidet habt; und das Gute: ich sehs ein und habs geschnallt.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.