Sich ändernde Buchstaben - Matrix Effekt

Status
Nicht offen für weitere Antworten.
M

Mike29

Gast
Hallo,
ich habe im Internet einen (schönen / Sinnlosen) Texteffekt (in php erstellt) gesehen und möchte ihn gerne in Java umsetzen, habe allerdings keine Ahnung wie ich Anfangen soll.

Ich versuche es mal zu erklären:


Und zwar wurde der Text zuerst in zufälligen Zeichen ausgegeben, z.B. : DJW§IVMSG DSI§"GFDVDSMV SDGJDJGN
Danach änderte sich jedes Zeichen ein paar mal in der Sekunde in ein zufälliges Zeichen.
Als nächstes wurde der Text von Links nach Rechts richtig angezeigt, d.h. der 1. Buchstabe änderte sich in sein Richtiges Zeichen und alle anderen Zeichen änderten sich dauernd weiter in zufällige Zeichen. Jetzt änderte sicher der 2. Buchstabe in den richtigen Buchstaben und alle restlichen weiter zufällig. Dies geht dann weiter von Links nach Rechts, bis der gesamte Text richtig angezeigt wurde.

Hoffe, ich bin verstanden worden und mir kann jemand helfen.

Danke im vorraus!!!
 

Oni

Top Contributor
willst du das in java machen, oder redest du von javascript?

wenn du das in java machen willst würde ich einfach 2 schleifen nehmen mit einem thread.sleep()
 

thE_29

Top Contributor
2 Fragen:

1. zeig mal die php Seite dann kann man sich mehr vorstellen.
2. willst du das in der Konsole oder grafisch (sprich in einer Swing oder AWT App) machen
 

The_S

Top Contributor
Generier dir z. B. ein char Array mit der Länge der Buchstaben die du möchtest. Erstelle mit Math. random zufällige Zeichen (als ASCII-Code) und wandle diese dann in chars um. Dann haste deine zufälligen Zeichen. Dann das Array mit diesen Zeichen befüllen und ausgeben. einen Thread mitlaufen lassen der in unregelmäßigen Abständen das Zeichen eines einzelnen Array-Elements ändert. Dann nach deiner bestimmten Zeit das 1. Element des Arrays auf den eigentlichen Buchstaben setzen, den Rest weiterlaufen lassen, dann das 2. Element auf den eigentlichen Buchstaben setzen usw. usf.

Hoff du hasts einigermaßen verstanden.
 

The_S

Top Contributor
Hab grad ma was geschrieben. Ist zwar noch seeeeeeeeeeehr erweiterbar und auch net der schönste Code, aber so hopplahopp gemacht kannste glaub ich was mit Anfangen ;). Hoffe mal du meinst auch sowas.

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;

public class IntroMatrix extends JFrame {
	
	BufferedImage img = new BufferedImage(800, 400, BufferedImage.TYPE_INT_RGB);
	String toPaint = "YMCA";
	char[] chArRan = null;
	char[] chArRight = null;
	Color background = null;
	Color foreground = null;
	Color match = null;
	
	public IntroMatrix(String str, Color back, Color forg, Color mt) {
		
		setSize(800, 400);
		background = back;
		foreground = forg;
		match = mt;
		toPaint = str;
		chArRan = new char[toPaint.length()];
		chArRight = new char[toPaint.length()];
		for (int i = 0; i < chArRan.length; i++) {
			chArRan[i] = greatRandomChar();
			chArRight[i] = ' ';
			goOn(i);
		}
		checkForEqual();
		repaint();
	}
	
	char greatRandomChar() {
		
		int i = (int)(Math.random() * 94) + 32;
		return (char)i;
	}
	
	void goOn(final int element) {
		
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					chArRan[element] = greatRandomChar();
					if (chArRan[element] == toPaint.charAt(element)) {
						chArRight[element] = chArRan[element];
						chArRan[element] = ' ';
						break;
					}
					repaint();
					try {
						Thread.sleep((int)(Math.random() * 100) + 20);
					}
					catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				repaint();
			}
		}).start();
	}
	
	void checkForEqual() {
		
		for (int i = chArRan.length - 1; i > -1; i--) {
			if (chArRan[i] == toPaint.charAt(i)) {
				chArRight[i] = chArRan[i];
				chArRan[i] = ' ';
			}
		}
	}
	
	public void setString(String str) {
		
		toPaint = str;
	}
	
	public String getString() {
		
		return toPaint;
	}
	
	public void setForeground(Color col) {
		
		foreground = col;
	}
	
	public Color getForeground() {
		
		return foreground;
	}
	
	public void setBackground(Color col) {
		
		background = col;
	}
	
	public Color getBackground() {
		
		return background;
	}
	
	public void setMatch(Color col) {
		
		match = col;
	}
	
	public Color getMatch() {
		
		return match;
	}
	
	public static void main(String[] args) {
		
		IntroMatrix im = new IntroMatrix("Hallo", Color.black, Color.red, Color.white);
		im.setVisible(true);
	}
	
	public void paint(Graphics comp) {
		
		Graphics2D comp2D = img.createGraphics();
		comp2D.setColor(background);
		comp2D.fillRect(0, 0, 800, 400);
		comp2D.setColor(foreground);
		for (int i = 0; i < chArRan.length; i++) {
			if (chArRan[i] != ' ') {
				comp2D.drawString(String.valueOf(chArRan[i]), (i + 1) * 20, 50);
			}
		}
		comp2D.setColor(match);
		for (int i = 0; i < chArRight.length; i++) {
			comp2D.drawString(String.valueOf(chArRight[i]), (i + 1) * 20, 50);
		}
		comp2D.dispose();
		comp.drawImage(img, 0, 0, null);
	}
}
 

thE_29

Top Contributor
Nach einer Zeit werden die Buchstaben weiß und bleiben fix??

Ist das gewollt??


Nachtrag: Oha, scheint so, steht ja Hallo :bae:
 
G

Guest

Gast
@ Hobbit_Im_Blutrausch

Spitzen Arbeit......respekt....genau so sollte es aussehen!!!!! THX




@ thE_29

Ja, genau so ist es gewollt!!!!
 

The_S

Top Contributor
thE_29 hat gesagt.:
Nach einer Zeit werden die Buchstaben weiß und bleiben fix??

Ist das gewollt??


Nachtrag: Oha, scheint so, steht ja Hallo :bae:

Jup, is so gewollt. Nach meiner Auffassung wollte der Threadsteller ja wirre Buchstaben die sich ständig ändern und nach und nach einen Sinn ergeben. Bin gerade dabei das ganze mal ein wenig flexibler zu gestalten ;).

[edit]

@ Gast, kein Thema. Hab festgestellt, dass ich sowas auch für mich brauchen könnte :wink:
 
G

Guest

Gast
Ne, den Link, wo ich es gesehen habe, habe ich leider nicht mehr!!!!
 

The_S

Top Contributor
Ilja hat gesagt.:
Hobbit, kannst du dann die flexible Version auch bitte posten ^^

Bin so ziemlich fertig, wüsst net was ich noch einbauen soll. Is im Grunde aber nix großartiges, ma kann halt nur die Schriftart, den Abstand zwischen den Zeichen, Wann ein Zeilenumbruch geschehen soll, ... einstellen. Und es erbt von JPanel. Da ich später eines benötige ;). Aber falls trotzdem Interesse besteht post ichs ma.
 

The_S

Top Contributor
Dürfte so passen. Nen einfacheren Konstruktor sollte ich evtl. noch einbauen aber ansonsten werd ich wohl nix großes mehr daran ändern (es sei denn ich hab nen Geistesblitz ;))

Zum Konstruktor:

Text zum Anzeigen, Hintergrundfarbe, Farbe der beweglichen Buchstaben, Farbe der festen Buchstaben, Font der beweglichen Buchstaben, Font der festen Buchstaben, Vertikaler Abstand der Buchstaben zueinander, Horizontaler Abstand der Buchsataben zueinander, Vertikale Startposition, true = Leerzeichen werden nicht gesucht, Entweder ein Zeichen bei dem in die nächste Zeile gesprungen werden soll, nach wie vielen Buchstaben umgebrochen werden soll oder gar nichts.

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;

public class Intro extends JPanel {
	
	BufferedImage img = new BufferedImage(800, 400, BufferedImage.TYPE_INT_RGB);
	String toPaint = "YMCA";
	public final int BREAK_NEVER = 0;
	public final int BREAK_CHAR = 1;
	public final int BREAK_COUNT = 2;
	int neueZeile = 0;
	int vertikal = 0;
	int horizontal = 0;
	int startVertikal = 0;
	int modus = 0;
	int speed = 100;
	char delmiter = 0;
	char[] chArRan = null;
	char[] chArRight = null;
	boolean ignoreWhiteSpace = true;
	boolean stop = false;
	Color background = null;
	Color foreground = null;
	Color match = null;
	Font searchFont = null;
	Font matchFont = null;
	
	public Intro(String str, Color back, Color forg, Color mt, Font sf, Font mf, int vert, int hori, int verS, boolean bln) {
		
		setStandard(str, back, forg, mt, sf, mf, vert, hori, verS, bln);
		modus = 0;
	}
	
	public Intro(String str, Color back, Color forg, Color mt, Font sf, Font mf, int vert, int hori, int verS, boolean bln, char del) {
		
		setStandard(str, back, forg, mt, sf, mf, vert, hori, verS, bln);
		delmiter = del;
		modus = 1;
	}
	
	public Intro(String str, Color back, Color forg, Color mt, Font sf, Font mf, int vert, int hori, int verS, boolean bln, int nl) {
		
		setStandard(str, back, forg, mt, sf, mf, vert, hori, verS, bln);
		neueZeile = nl;
		modus = 2;
	}
	
	void setStandard(String str, Color back, Color forg, Color mt, Font sf, Font mf, int vert, int hori, int verS, boolean bln) {
		
		setSize(800, 400);
		ignoreWhiteSpace = bln;
		startVertikal = verS;
		vertikal = vert;
		horizontal = hori;
		searchFont = sf;
		matchFont = mf;
		background = back;
		foreground = forg;
		match = mt;
		toPaint = str;
		chArRan = new char[toPaint.length()];
		chArRight = new char[toPaint.length()];
		for (int i = 0; i < chArRan.length; i++) {
			chArRan[i] = ' ';
			chArRight[i] = ' ';
		}
	}
	
	public void start() {
		
		stop = false;
		checkForNotAllowedChars();
		chArRan = new char[toPaint.length()];
		chArRight = new char[toPaint.length()];
		for (int i = 0; i < chArRan.length; i++) {
			chArRight[i] = ' ';
			goOn(i);
		}
		repaint();
	}
	
	public void stop() {
		
		stop = true;
	}
	
	char greatRandomChar() {
		
		int i = (int)(Math.random() * 94) + 32;
		return (char)i;
	}
	
	void checkForNotAllowedChars() {
		
		char[] ch = toPaint.toCharArray();
		int temp = 0;
		for (int i = 0; i < ch.length; i++) {
			temp = (int)ch[i];
			if (temp < 32 || temp > 126) {
				ch[i] = '?';
			}
		}
		toPaint = String.valueOf(ch);
	}
	
	void goOn(final int element) {
		
		new Thread(new Runnable() {
			public void run() {
				while (stop == false) {
					chArRan[element] = greatRandomChar();
					if (chArRan[element] == toPaint.charAt(element)) {
						chArRight[element] = chArRan[element];
						chArRan[element] = ' ';
						break;
					}
					repaint();
					try {
						Thread.sleep((int)(Math.random() * speed) + 20);
					}
					catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				repaint();
			}
		}).start();
	}
	
	public void paint(Graphics comp) {
		
		Graphics2D comp2D = img.createGraphics();
		int vertikalAkt = startVertikal;
		comp2D.setColor(background);
		comp2D.fillRect(0, 0, getWidth(), getHeight());
		comp2D.setColor(foreground);
		comp2D.setFont(searchFont);
		for (int i = 0, j = 0; i < chArRan.length; i++, j++) {
			if (chArRan[i] != ' ' && (ignoreWhiteSpace == false || toPaint.charAt(i) != ' ')) {
				comp2D.drawString(String.valueOf(chArRan[i]), (j + 1) * horizontal, vertikalAkt);
			}
			if ((modus == 2 && j == neueZeile) || (modus == 1 && delmiter == toPaint.charAt(i))) {
				vertikalAkt += vertikal;
				j = -1;
			}
		}
		vertikalAkt = startVertikal;
		comp2D.setColor(match);
		comp2D.setFont(matchFont);
		for (int i = 0, j = 0; i < chArRight.length; i++, j++) {
			if (chArRight[i] != ' ') {
				comp2D.drawString(String.valueOf(chArRight[i]), (j + 1) * horizontal, vertikalAkt);
			}
			if ((modus == 2 && j == neueZeile) || (modus == 1 && delmiter == toPaint.charAt(i))) {
				vertikalAkt += vertikal;
				j = -1;
			}
		}
		comp2D.dispose();
		comp.drawImage(img, 0, 0, null);
	}
	
	public void setString(String str) {
		
		toPaint = str;
	}
	
	public String getString() {
		
		return toPaint;
	}
	
	public void setForeground(Color col) {
		
		foreground = col;
	}
	
	public Color getForeground() {
		
		return foreground;
	}
	
	public void setBackground(Color col) {
		
		background = col;
	}
	
	public Color getBackground() {
		
		return background;
	}
	
	public void setMatch(Color col) {
		
		match = col;
	}
	
	public Color getMatch() {
		
		return match;
	}
	
	public void setSearchFont(Font f) {
		
		searchFont = f;
	}
	
	public Font getSearchFont() {
		
		return searchFont;
	}
	
	public void setMatchFont(Font f) {
		
		matchFont = f;
	}
	
	public Font getMatchFont() {
		
		return matchFont;
	}
	
	public void setVertical(int i) {
		
		vertikal = i;
	}
	
	public int getVartical() {
		
		return vertikal;
	}
	
	public void setHorizontal(int i) {
		
		horizontal = i;
	}
	
	public int getHorizontal() {
		
		return horizontal;
	}
	
	public void setVerticalStart(int i) {
		
		startVertikal = i;
	}
	
	public int getVerticalStart() {
		
		return startVertikal;
	}
	
	public void setIgnoreWhiteSpace(boolean bln) {
		
		ignoreWhiteSpace = bln;
	}
	
	public boolean getIgnoreWhiteSpace() {
		
		return ignoreWhiteSpace;
	}
	
	public void setDelmiter(char ch) {
		
		delmiter = ch;
	}
	
	public char getDelmiter() {
		
		return delmiter;
	}
	
	public void setLineBreak(int i) {
		
		neueZeile = i;
	}
	
	public int getLineBreak() {
		
		return neueZeile;
	}
	
	public void setModus(int i) {
		
		modus = i;
	}
	
	public int getModus() {
		
		return modus;
	}
	
	public void setSpeed(int i) {
		
		speed = i;
	}
	
	public int getSpeed() {
		
		return speed;
	}
}
 

Bastian

Bekanntes Mitglied
@hobbit, warum um alles in der welt denn so einen riesigen kosntruktor?? machs doch leiber mit methoden, bzw würdest du mal einen vollständigen konstruktoraufruf posten (also einen "lauffähigen", weil das ist ja der horror, alle wertde in den konstrktor einzutragen...)
 

The_S

Top Contributor
1. Ich hab Methoden
2. Ich hab darauf hingewiesen dass der Konstruktor ein wenig unübersichtlich ist und ich noch nen anderen einbauen soll
3. Du musst es ja net benutzen, wenn ma gleich pampig wird :roll:
4. kommt gleich

[edit]

Code:
   Intro intro = new Intro("Hallo und Herzlich Willkommen auf www.stefan-kiesel.gmxhome.de", Color.black, Color.red, Color.white, 
                      new Font("monospaced", Font.PLAIN, 18), new Font("monospaced", Font.BOLD, 20), 
                      20, 10, 50, true, 33);

[edit 2] Boah scheiße, musste gerade feststellen dass das extrem langsam ist bei vielen Buchstaben :bloed: . Ma gucken was ma da an der Performance schrauben kann ...
 

Illuvatar

Top Contributor
Btw ich habs auch hingekriegt das Viech mal zu testen anhand von den Angaben, die Hobbit vorher gemacht hat...
 

The_S

Top Contributor
Illuvatar hat gesagt.:
Btw ich habs auch hingekriegt das Viech mal zu testen anhand von den Angaben, die Hobbit vorher gemacht hat...

Thx ;)

Hm ... geht doch schnell. Darf nur net gleich beim Start ausgeführt werden. kA warum ???:L
 

The_S

Top Contributor
Slava hat gesagt.:
Mein Respekt an Hobbit_Im_Blutrausch

Darf man auch fragen warum? So n rießen Akt war dass ja jetzt auch wieder net :roll: . Aber trotzdem herzlichen Dank :oops: .

So gibts jetzt auch mit einfachen Konstruktor

Code:
import java.awt.*; 
import javax.swing.*; 
import java.awt.image.BufferedImage;

public class Intro extends JApplet { 
	 
	BufferedImage img;
	String toPaint = null; 
	public final int BREAK_NEVER = 0; 
	public final int BREAK_CHAR = 1; 
	public final int BREAK_COUNT = 2; 
	int neueZeile = 0; 
	int vertikal = 20; 
	int horizontal = 10; 
	int startVertikal = 50; 
	int modus = 0; 
	int speed = 100; 
	char delmiter = 0; 
	char[] chArRan = null; 
	char[] chArRight = null; 
	boolean ignoreWhiteSpace = true; 
	boolean stop = false; 
	Color background = Color.black; 
	Color foreground = Color.red; 
	Color match = Color.white; 
	Font searchFont = new Font("monospaced", Font.ITALIC, 18); 
	Font matchFont = new Font("monospaced", Font.BOLD, 20); 
	 
	public Intro(String str, int width, int height) {

		toPaint = str;
		img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		setPreferredSize(new Dimension(width, height));
		chArRan = new char[toPaint.length()]; 
		chArRight = new char[toPaint.length()]; 
		for (int i = 0; i < chArRan.length; i++) { 
			chArRight[i] = ' '; 
		} 
	} 
	 
	public void start() { 
		 
		stop = false; 
		checkForNotAllowedChars(); 
		chArRan = new char[toPaint.length()]; 
		chArRight = new char[toPaint.length()]; 
		for (int i = 0; i < chArRan.length; i++) { 
			chArRight[i] = ' '; 
			goOn(i); 
		} 
		repaint(); 
	} 
	 
	public void stop() { 
		 
		stop = true; 
	} 
	 
	char greatRandomChar() { 
		 
		int i = (int)(Math.random() * 94) + 32; 
		return (char)i; 
	} 
	 
	void checkForNotAllowedChars() { 
		 
		char[] ch = toPaint.toCharArray(); 
		int temp = 0; 
		for (int i = 0; i < ch.length; i++) { 
			temp = (int)ch[i]; 
			if (temp < 32 || temp > 126) { 
				ch[i] = '?'; 
			} 
		} 
		toPaint = String.valueOf(ch); 
	} 
	 
	void goOn(final int element) { 
		 
		new Thread(new Runnable() { 
			public void run() { 
				while (stop == false) { 
					chArRan[element] = greatRandomChar(); 
					if (chArRan[element] == toPaint.charAt(element)) { 
						chArRight[element] = chArRan[element]; 
						chArRan[element] = ' '; 
						break; 
					} 
					repaint(); 
					try { 
						Thread.sleep((int)(Math.random() * speed) + 20); 
					} 
					catch (InterruptedException e) { 
						e.printStackTrace(); 
					} 
				} 
				repaint(); 
			} 
		}).start(); 
	} 
	 
	public void paint(Graphics comp) { 
		 
		Graphics2D comp2D = img.createGraphics(); 
		int vertikalAkt = startVertikal; 
		comp2D.setColor(background); 
		comp2D.fillRect(0, 0, getWidth(), getHeight()); 
		comp2D.setColor(foreground); 
		comp2D.setFont(searchFont); 
		for (int i = 0, j = 0; i < chArRan.length; i++, j++) { 
			if (chArRan[i] != ' ' && (ignoreWhiteSpace == false || toPaint.charAt(i) != ' ')) { 
				comp2D.drawString(String.valueOf(chArRan[i]), (j + 1) * horizontal, vertikalAkt); 
			} 
			if ((modus == 2 && j == neueZeile) || (modus == 1 && delmiter == toPaint.charAt(i))) { 
				vertikalAkt += vertikal; 
				j = -1; 
			} 
		} 
		vertikalAkt = startVertikal; 
		comp2D.setColor(match); 
		comp2D.setFont(matchFont); 
		for (int i = 0, j = 0; i < chArRight.length; i++, j++) { 
			if (chArRight[i] != ' ') { 
				comp2D.drawString(String.valueOf(chArRight[i]), (j + 1) * horizontal, vertikalAkt); 
			} 
			if ((modus == 2 && j == neueZeile) || (modus == 1 && delmiter == toPaint.charAt(i))) { 
				vertikalAkt += vertikal; 
				j = -1; 
			} 
		} 
		comp2D.dispose(); 
		comp.drawImage(img, 0, 0, null); 
	} 
	 
	public void setString(String str) { 
		 
		toPaint = str; 
	} 
	 
	public String getString() { 
		 
		return toPaint; 
	} 
	 
	public void setForeground(Color col) { 
		 
		foreground = col; 
	} 
	 
	public Color getForeground() { 
		 
		return foreground; 
	} 
	 
	public void setBackground(Color col) { 
		 
		background = col; 
	} 
	 
	public Color getBackground() { 
		 
		return background; 
	} 
	 
	public void setMatch(Color col) { 
		 
		match = col; 
	} 
	 
	public Color getMatch() { 
		 
		return match; 
	} 
	 
	public void setSearchFont(Font f) { 
		 
		searchFont = f; 
	} 
	 
	public Font getSearchFont() { 
		 
		return searchFont; 
	} 
	 
	public void setMatchFont(Font f) { 
		 
		matchFont = f; 
	} 
	 
	public Font getMatchFont() { 
		 
		return matchFont; 
	} 
	 
	public void setVertical(int i) { 
		 
		vertikal = i; 
	} 
	 
	public int getVartical() { 
		 
		return vertikal; 
	} 
	 
	public void setHorizontal(int i) { 
		 
		horizontal = i; 
	} 
	 
	public int getHorizontal() { 
		 
		return horizontal; 
	} 
	 
	public void setVerticalStart(int i) { 
		 
		startVertikal = i; 
	} 
	 
	public int getVerticalStart() { 
		 
		return startVertikal; 
	} 
	 
	public void setIgnoreWhiteSpace(boolean bln) { 
		 
		ignoreWhiteSpace = bln; 
	} 
	 
	public boolean getIgnoreWhiteSpace() { 
		 
		return ignoreWhiteSpace; 
	} 
	 
	public void setDelmiter(char ch) { 
		 
		delmiter = ch; 
	} 
	 
	public char getDelmiter() { 
		 
		return delmiter; 
	} 
	 
	public void setLineBreak(int i) { 
		 
		neueZeile = i; 
	} 
	 
	public int getLineBreak() { 
		 
		return neueZeile; 
	} 
	 
	public void setModus(int i) { 
		 
		modus = i; 
	} 
	 
	public int getModus() { 
		 
		return modus; 
	} 
	 
	public void setSpeed(int i) { 
		 
		speed = i; 
	} 
	 
	public int getSpeed() { 
		 
		return speed; 
	} 
}
 
D

Dennis

Gast
Echt gute Arbeit @ Hobbit_Im_Blutrausch!!!

Allerdings bekomme ich das letzte Programm nicht ans laufen: "Fehlermeldung: Kein aktiver Haupttyp!"

Vieleicht kann nochmal jemande ein komplett lauffähiges Programm posten!!!!

THX
 

Bastian

Bekanntes Mitglied
Hobbit_Im_Blutrausch hat gesagt.:
[...]wenn ma gleich pampig wird :roll:
4. kommt gleich
[...]

tschulsigung, war nicht pampig gemeint.

sorry.gif
 

Ilja

Bekanntes Mitglied
kriegs auch nicht zum laufen...

habs initialisiert, und *.start() gemacht... passiert aber nix... wird nach paar sekunden beendet -.-

applet geht auch nit -.-
 

The_S

Top Contributor
@ Bastian, passt scho :wink:

@ ilja

Extra so umgeschrieben dass es genau so simpel und einfach auszuführen geht ;)

Zum ausführen

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Zeichen_Animation extends JFrame implements ActionListener {
	
	Intro intro = new Intro("Hallo Ilja,ich hoffe jetzt funktioniert das bei dir ;)", 700, 300);
	JPanel pane = new JPanel();
	JButton start = new JButton("Start");
	JButton stop = new JButton("Stop");
	
	public Zeichen_Animation() {
		
		intro.setModus(intro.BREAK_CHAR);
		intro.setDelmiter(',');
		start.addActionListener(this);
		stop.addActionListener(this);
		pane.add(intro);
		pane.add(start);
		pane.add(stop);
		setContentPane(pane);
		pack();
	}
	
	public static void main(String[] args) {
		
		Zeichen_Animation ani = new Zeichen_Animation();
		ani.setVisible(true);
	}
	
	public void actionPerformed(ActionEvent evt) {
		
		Object source = evt.getSource();
		if (source == start) {
			intro.start();
		}
		else if (source == stop) {
			intro.stop();
		}
	}
}

Das Intro, hab das jetzt als Applet gelassen, da ich es später auch als Applet benötigte

Code:
import java.awt.*; 
import javax.swing.*; 
import java.awt.image.BufferedImage; 

public class Intro extends JApplet { 
	
	BufferedImage img; 
	String toPaint = null; 
	public final int BREAK_NEVER = 0; 
	public final int BREAK_CHAR = 1; 
	public final int BREAK_COUNT = 2; 
	int neueZeile = 0; 
	int vertikal = 20; 
	int horizontal = 10; 
	int startVertikal = 50; 
	int modus = 0; 
	int speed = 100; 
	char delmiter = 0; 
	char[] chArRan = null; 
	char[] chArRight = null; 
	boolean ignoreWhiteSpace = true; 
	boolean stop = false; 
	Color background = Color.black; 
	Color foreground = Color.red; 
	Color match = Color.white; 
	Font searchFont = new Font("monospaced", Font.ITALIC, 18); 
	Font matchFont = new Font("monospaced", Font.BOLD, 20); 
	 
	public Intro(String str, int width, int height) { 

		toPaint = str; 
		img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
		setPreferredSize(new Dimension(width, height)); 
		chArRan = new char[toPaint.length()]; 
		chArRight = new char[toPaint.length()]; 
		for (int i = 0; i < chArRan.length; i++) { 
			chArRight[i] = ' '; 
			chArRan[i] = ' ';
		} 
	} 
	 
	public void start() { 
		 
		stop = false; 
		checkForNotAllowedChars(); 
		chArRan = new char[toPaint.length()]; 
		chArRight = new char[toPaint.length()]; 
		for (int i = 0; i < chArRan.length; i++) { 
			chArRight[i] = ' '; 
			goOn(i); 
		} 
		repaint(); 
	} 
	 
	public void stop() { 
		 
		stop = true; 
	} 
	 
	char greatRandomChar() { 
		 
		int i = (int)(Math.random() * 94) + 32; 
		return (char)i; 
	} 
	 
	void checkForNotAllowedChars() { 
		 
		char[] ch = toPaint.toCharArray(); 
		int temp = 0; 
		for (int i = 0; i < ch.length; i++) { 
			temp = (int)ch[i]; 
			if (temp < 32 || temp > 126) { 
				ch[i] = '?'; 
			} 
		} 
		toPaint = String.valueOf(ch); 
	} 
	 
	void goOn(final int element) { 
		 
		new Thread(new Runnable() { 
			public void run() { 
				while (stop == false) { 
					chArRan[element] = greatRandomChar(); 
					if (chArRan[element] == toPaint.charAt(element)) { 
						chArRight[element] = chArRan[element]; 
						chArRan[element] = ' '; 
						break; 
					} 
					repaint(); 
					try { 
						Thread.sleep((int)(Math.random() * speed) + 20); 
					} 
					catch (InterruptedException e) { 
						e.printStackTrace(); 
					} 
				} 
				repaint(); 
			} 
		}).start(); 
	} 
	 
	public void paint(Graphics comp) { 
		 
		Graphics2D comp2D = img.createGraphics(); 
		int vertikalAkt = startVertikal; 
		comp2D.setColor(background); 
		comp2D.fillRect(0, 0, getWidth(), getHeight()); 
		comp2D.setColor(foreground); 
		comp2D.setFont(searchFont); 
		for (int i = 0, j = 0; i < chArRan.length; i++, j++) { 
			if (chArRan[i] != ' ' && (ignoreWhiteSpace == false || toPaint.charAt(i) != ' ')) { 
				comp2D.drawString(String.valueOf(chArRan[i]), (j + 1) * horizontal, vertikalAkt); 
			} 
			if ((modus == 2 && j == neueZeile) || (modus == 1 && delmiter == toPaint.charAt(i))) { 
				vertikalAkt += vertikal; 
				j = -1; 
			} 
		} 
		vertikalAkt = startVertikal; 
		comp2D.setColor(match); 
		comp2D.setFont(matchFont); 
		for (int i = 0, j = 0; i < chArRight.length; i++, j++) { 
			if (chArRight[i] != ' ') { 
				comp2D.drawString(String.valueOf(chArRight[i]), (j + 1) * horizontal, vertikalAkt); 
			} 
			if ((modus == 2 && j == neueZeile) || (modus == 1 && delmiter == toPaint.charAt(i))) { 
				vertikalAkt += vertikal; 
				j = -1; 
			} 
		} 
		comp2D.dispose(); 
		comp.drawImage(img, 0, 0, null); 
	} 
	 
	public void setString(String str) { 
		 
		toPaint = str; 
	} 
	 
	public String getString() { 
		 
		return toPaint; 
	} 
	 
	public void setForeground(Color col) { 
		 
		foreground = col; 
	} 
	 
	public Color getForeground() { 
		 
		return foreground; 
	} 
	 
	public void setBackground(Color col) { 
		 
		background = col; 
	} 
	 
	public Color getBackground() { 
		 
		return background; 
	} 
	 
	public void setMatch(Color col) { 
		 
		match = col; 
	} 
	 
	public Color getMatch() { 
		 
		return match; 
	} 
	 
	public void setSearchFont(Font f) { 
		 
		searchFont = f; 
	} 
	 
	public Font getSearchFont() { 
		 
		return searchFont; 
	} 
	 
	public void setMatchFont(Font f) { 
		 
		matchFont = f; 
	} 
	 
	public Font getMatchFont() { 
		 
		return matchFont; 
	} 
	 
	public void setVertical(int i) { 
		 
		vertikal = i; 
	} 
	 
	public int getVartical() { 
		 
		return vertikal; 
	} 
	 
	public void setHorizontal(int i) { 
		 
		horizontal = i; 
	} 
	 
	public int getHorizontal() { 
		 
		return horizontal; 
	} 
	 
	public void setVerticalStart(int i) { 
		 
		startVertikal = i; 
	} 
	 
	public int getVerticalStart() { 
		 
		return startVertikal; 
	} 
	 
	public void setIgnoreWhiteSpace(boolean bln) { 
		 
		ignoreWhiteSpace = bln; 
	} 
	 
	public boolean getIgnoreWhiteSpace() { 
		 
		return ignoreWhiteSpace; 
	} 
	 
	public void setDelmiter(char ch) { 
		 
		delmiter = ch; 
	} 
	 
	public char getDelmiter() { 
		 
		return delmiter; 
	} 
	 
	public void setLineBreak(int i) { 
		 
		neueZeile = i; 
	} 
	 
	public int getLineBreak() { 
		 
		return neueZeile; 
	} 
	 
	public void setModus(int i) { 
		 
		modus = i; 
	} 
	 
	public int getModus() { 
		 
		return modus; 
	} 
	 
	public void setSpeed(int i) { 
		 
		speed = i; 
	} 
	 
	public int getSpeed() { 
		 
		return speed; 
	} 
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
KogoroMori21 Wann ist der richtige Zeitpunkt, um sich Hilfe zu suchen? (Bin Informatik-Student) Java Basics - Anfänger-Themen 10
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
T code so schreiben das er von sich selber anpasst (code soll die anzahl aller bustaben bestimmen) Java Basics - Anfänger-Themen 16
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
G jar file lässt sich nicht öffnen Java Basics - Anfänger-Themen 1
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
berserkerdq2 Spiel hängt sich immer in der 4 Runde auf, obwohl ich jede Runde das gleiche mache Java Basics - Anfänger-Themen 1
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
J Mein Java Programm lässt sich nicht mehr bearbeiten Java Basics - Anfänger-Themen 2
A Konsolenausgabe verschiebt sich Java Basics - Anfänger-Themen 8
M Wie lassen sich Konstanten in Bedingung stellen? Java Basics - Anfänger-Themen 1
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
B Programm beendet sich nicht und weiteres seltsames Verhalten Java Basics - Anfänger-Themen 9
Nina Pohl Ein Vorgang bezog sich auf ein Objekt, das kein Socket ist Java Basics - Anfänger-Themen 6
H 36 Zufallszahlen die sich nicht wiederholen Java Basics - Anfänger-Themen 27
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
IamArctic Quaxli Tutorial, Rotorblätter bewegen sich nicht mehr Java Basics - Anfänger-Themen 4
M Java GUI label ändert sich erst zum Schluss Java Basics - Anfänger-Themen 4
H Liste speichern. Was lässt sich verbessern? Java Basics - Anfänger-Themen 7
X Kurzes Java-Programm, das sich komisch verhält Java Basics - Anfänger-Themen 6
J CMD schließt sich automatisch Java Basics - Anfänger-Themen 5
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
F boolean stellt sich auf true Java Basics - Anfänger-Themen 15
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
H Punkt bewegt sich auf einer Ellipse Java Basics - Anfänger-Themen 6
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
I Klassen Eine ArrayList<Long>, die sich automatisch sortiert Java Basics - Anfänger-Themen 20
Franzi1001 ScrollBar lässt sich nicht bewegen Java Basics - Anfänger-Themen 4
W Client verbindet sich nicht Java Basics - Anfänger-Themen 14
J Mein Programm beendet sich ohne mein Zutun Java Basics - Anfänger-Themen 9
J Zwei Klassen die sich gegenseitig referenzieren - Bad practice? Java Basics - Anfänger-Themen 4
N Bewegtes Objekt soll sich um eine Parallele bewegen Java Basics - Anfänger-Themen 0
K Zufalsszahl soll sich nicht wiederholen Java Basics - Anfänger-Themen 9
C Classpath Compiler lässt sich nur bedingt von Kommandozeile aus starten Java Basics - Anfänger-Themen 17
CptK Datentypen Objekt lässt sich nicht zu arraylist hinzufügen Java Basics - Anfänger-Themen 2
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
P jar file lässt sich nicht ausführen Java Basics - Anfänger-Themen 4
L Programm lässt sich nicht starten! Java Basics - Anfänger-Themen 1
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Hanschyo Programm schließt sich einfach Java Basics - Anfänger-Themen 2
L Panel verkleinert sich unerklärlicherweise Java Basics - Anfänger-Themen 7
J JFrame Fenster öffnet sich nicht Java Basics - Anfänger-Themen 7
x-tshainge Mein Programm lässt sich nicht Starten Java Basics - Anfänger-Themen 8
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
B Java -Turtle Grafik - kennt sich jemand damit aus? Java Basics - Anfänger-Themen 1
K Sysout wiederholt sich Java Basics - Anfänger-Themen 6
H Wieso öffnet sich der Texteditor? Java Basics - Anfänger-Themen 6
B Classpath Class lässt sich nicht öffnen Java Basics - Anfänger-Themen 3
J Java-Dateien lassen sich nicht editieren Java Basics - Anfänger-Themen 46
T Schleife fährt sich fest Java Basics - Anfänger-Themen 14
E App lässt sich nicht starten Java Basics - Anfänger-Themen 8
ZotacZ Best Practice Lohnt es sich in GWT einzuarbeiten? Java Basics - Anfänger-Themen 4
E Pdf-Document lässt sich im Servlet nicht öffnen Java Basics - Anfänger-Themen 5
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
S String ändert sich nicht Java Basics - Anfänger-Themen 2
Bregedur Methoden Matcher und Pattern bei sich wiederholenden Werten Java Basics - Anfänger-Themen 1
P Compiler-Fehler Wo befindet sich hier der Fehler und warum? Java Basics - Anfänger-Themen 21
F MouseMotionListener - Objekt bewegt sich nicht Java Basics - Anfänger-Themen 1
S Erste Schritte Java Applet lässt sich im Browser nicht öffnen Java Basics - Anfänger-Themen 9
G Was hat es mit java.net.* auf sich? Java Basics - Anfänger-Themen 10
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
J Kann eine .jar sich selber Löschen? Java Basics - Anfänger-Themen 5
OlafHD Java Uhrzeit aktualisiert sich nicht Java Basics - Anfänger-Themen 2
J Java Datei lässt sich nicht kompilieren Java Basics - Anfänger-Themen 3
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
J Wie lässt sich der Konstruktor einer Klasse einer Funktion einer Klasse nutzen. Java Basics - Anfänger-Themen 4
W OOP Zwei Objekte beziehen sich aufeinander (Zirkelbezug)? Java Basics - Anfänger-Themen 4
cezary Server läßt sich nicht starten Java Basics - Anfänger-Themen 2
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
S Variable (int) erhöht sich nicht richtig Java Basics - Anfänger-Themen 18
B Konsole schließt sich sofort Java Basics - Anfänger-Themen 8
Fishmeaker Methoden mit Methoden aufrufen - Programm hängt sich auf Java Basics - Anfänger-Themen 5
F Inhalt einer Variable auswerten, die sich immer wieder ändert Java Basics - Anfänger-Themen 1
T Methoden [GELÖST ]Warum ruft sich die Methode von alleine auf? Java Basics - Anfänger-Themen 3
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
M Array mit Objekten lässt sich nicht auslesen Java Basics - Anfänger-Themen 10
T Scanner lässt sich nicht importieren Java Basics - Anfänger-Themen 1
Lord.Djerun (Netbeans) Bei TimeUnit.Seconds,Sleep() hängt sich das komplette Programm auf.. Java Basics - Anfänger-Themen 8
P Programm lässt sich nicht starten - Klasse mit Hauptmethode nicht gefunden Java Basics - Anfänger-Themen 9
B Compiler-Fehler [Lejos] [RCX] Programm lässt sich nicht kompilieren Java Basics - Anfänger-Themen 5
N Variablen Array-Variable verändert sich Java Basics - Anfänger-Themen 12
HoloYoitsu BufferedReader verhält sich seltsam Java Basics - Anfänger-Themen 10
S Programm verhält sich in Eclipse anders, als ein eigenständiges Programm Java Basics - Anfänger-Themen 5
N Von Kopf bis Fuss TestArrays lässt sich nicht lösen Java Basics - Anfänger-Themen 5
S Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String Java Basics - Anfänger-Themen 3
dat_vin JFrame öffnet sich mehrmals Java Basics - Anfänger-Themen 6
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
T GUI öffnet sich nicht Java Basics - Anfänger-Themen 23
G Java lässt sich nicht installieren Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben