• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

java und farbe omg help plz

Mitglied seit
04.01.2004
Beiträge
1.480
Reaktionen
0
ähm ich soll ein programm erstellen, das mir erlaubt christbäume zu zeichnen mittles einer Klasse, die wir in der vorlesung gesehen haben, ganz was billiges

der baum soll nur aus mehreren * bestehen. soweit kein problem, man soll aber auch die möglichkeit besitzen, einzugeben, welche witterung es hat bla bla, sprich ich soll weiße bäume auf schwarzem hintergrund und schwarze bäume auf weißem hintergrund zeichnen können, ich habe aber das problem dass ich nicht weiß, wie ich die textfarbe bzw die hintergrundfarbe ändere.

kann mir bitte jemand helfen. mit hintergrund ist gemeint der hintergrund von dem einen feld in dem ich gerade das * hineinschreibe

und gegoogelt hab ich schon, 1 stunde lang...
 

Thubb

Guest
ganz spontan würde ich dir die setForeground() und setBackground() methoden empfehlen...

da ich jedoch nicht weiss, was du für eine klasse benutzt kann es auch was anderes sein...

häng doch mal die klasse an, dann kann ich dir weiter helfen...
 
Mitglied seit
04.01.2004
Beiträge
1.480
Reaktionen
0
also wir benutzen turtle und paper, sehen wie folgt aus:

/************************************************
*Klasse fuer Schreib-/Zeichenblatt
* fuer z.B. Turtle Graphics
************************************************/

public class Paper {

//-------------------------------------Instanzvariablen
private int size; //quadratisch
private char[][] content;
//---------------------------------------------Methoden

public void clear(){
for (int i=0; i<size; i++)
for (int j=0; j<size; j++)
content[j] = ' ';
}

public Paper(){ //default Konstruktor
size = 10;
content = new char[size][size];
clear();
}

public Paper(int size){ //Konstruktor
this.size = size;
content = new char[size][size];
clear();
}

public int getSize(){
return size;
}



public void mark(int i, int j, char symbol){
//requires 0<=i,j<size
content[j] = symbol;
}

public void display(){
for (int i=0; i<size; i++){
for (int j=0; j<size; j++)
System.out.print(content[j]);
System.out.println();
}
}
}




/**********************************************************
/*Klasse fuer Turtle Graphics
/*benoetigt Objekt der Klasse Paper als Zeichenblatt
/* (wird in Konstruktor uebergeben !!)
**********************************************************/

public class Turtle {
//-------------------------------------Instanzvariablen

private Paper myPaper; //private nicht sehr nuetzlich
private int paperSize;
private int x, y;
private int direction;
private boolean penActive;
private char symbol;
private final int NORTH=0, EAST=1, SOUTH=2, WEST=3;
//------------------------------------------Konstruktor
// paper noetig - kein default !!!

public Turtle(Paper somePaper){
myPaper = somePaper;
paperSize = myPaper.getSize();
x = 0; y = 0;
direction = EAST;
penActive = false;
symbol = '*';
}

//--------------------------------------------Methoden

public void move(int distance) {
//requires: distance >= 0;
//requires: direction in 0..3;
//requires: 0 <= x,y < paperSize;
//movement stops at edge of paper

int startX = x, startY = y;
if (distance < 0){
System.out.println("distance < 0 ignored");
return;
}

switch (direction) {

case NORTH:

y = Math.max(y - distance, 0);
if (penActive)
for (int i = startY; i >= y; i--)
myPaper.mark(i,x,symbol);
break;

case SOUTH:

y = Math.min(y + distance, paperSize-1);
if (penActive)
for (int i = startY; i <= y; i++)
myPaper.mark(i,x,symbol);
break;

case WEST:

x = Math.max(x - distance, 0);
if (penActive)
for (int i = startX; i >= x; i--)
myPaper.mark(y,i,symbol);

break;

case EAST:

x = Math.min(x + distance, paperSize-1);
if (penActive)
for (int i = startX; i <= x; i++)
myPaper.mark(y,i,symbol);

break;
}
}


public void penUp() {
penActive = false;
}
public void penDown(){
penActive = true;

}


public void left() {
// requires: direction in 0..3;

switch (direction) {

case NORTH:
direction = WEST; break;
case WEST:
direction = SOUTH; break;
case SOUTH:
direction = EAST; break;
case EAST:
direction = NORTH; break;

}
}
public void right() {
// requires: direction in 0..3;
switch (direction) {
case NORTH:
direction = EAST; break;
case EAST:
direction = SOUTH; break;
case SOUTH:
direction = WEST; break;
case WEST:
direction = NORTH; break;
}
}
public void setSymbol(char someSymbol){
symbol = someSymbol;
}
public void setPaper(Paper somePaper){
myPaper = somePaper;
}
public Paper getPaper(){
return myPaper;
}
}

das ganze funktioniert eigentlich ganz einfach, model kann man sich so vorstellen: schildkröte kriecht am blatt herum, man kann sie bewegen, nach links oder rechts drehen und eben mit dem stift malen lassen oder auch nicht uns so sollen wir eben eine Klasse schreiben, die eine methode draw hat, in der man weihnachtsbäume zeichnen kann, in verschiedenen grössen, an verschiedenen stellen des blattes und verschiedene farbe, schwarz weiß eben.

baum sieht so aus

______*
_____***
____*****
___*******
______*
 

Thubb

Guest
also mit System.out.println() wist du keine unterschiedlichen farben in einer dos-konsole hinbekommen...

wenn dann musst du ne klasse von z.b. TextArea ableiten...

wenn das ok ist, sag bescheid, das ist ja net schwer zu machen...
 

Thubb

Guest
also so könnte man es machen, ist aber seeeeeeehr schwul!!!

Code:
/************************************************
*Klasse fuer Schreib-/Zeichenblatt
* fuer z.B. Turtle Graphics
************************************************/

package turtle;

import javax.swing.*;

public class Paper extends JTextArea {

	//-------------------------------------Instanzvariablen
	private int size; //quadratisch
	private char[][] content;
	//---------------------------------------------Methoden
	
	public Paper() { //default Konstruktor
		super(10,10);
		size = 10;
		content = new char[size][size];
		clear();
		setEditable(false);
		setHighlighter(null);
	}
	
	public Paper(int size) { //Konstruktor
		super(size/5,size/5);
		this.size = size;
		content = new char[size][size];
		clear();
		setEditable(false);
		setHighlighter(null);
	}
	
	public void clear() {
		setText(null);
		for (int i=0; i<size; i++)
			for (int j=0; j<size; j++)
				content[i][j] = ' ';
	}
	
	public int getTheSize() {
		return size;
	}
	
	public void mark(int i, int j, char symbol) {
		//requires 0<=i,j<size
		content[i][j] = symbol;		
	}
	
	public void display() {
		setText(null);
		StringBuilder buf = new StringBuilder(size*size);
		for (int i=0; i<size; i++) {
			for (int j=0; j<size; j++) {
				if(content[i][j] == ' ')
					buf.append(" ");
				else
					buf.append(""+content[i][j]);
			}
			buf.append("\r\n");
		}
		setText(buf.toString());
	}	
}
Code:
/**********************************************************
/*Klasse fuer Turtle Graphics
/*benoetigt Objekt der Klasse Paper als Zeichenblatt
/* (wird in Konstruktor uebergeben !!)
**********************************************************/

package turtle;

public class Turtle {
//-------------------------------------Instanzvariablen

	private Paper myPaper; //private nicht sehr nuetzlich
	private int paperSize;
	private int x, y;
	private int direction;
	private boolean penActive;
	private char symbol;
	private static final int NORTH=0, EAST=1, SOUTH=2, WEST=3;
	//------------------------------------------Konstruktor
	// paper noetig - kein default !!!
	
	public Turtle(Paper somePaper){
		myPaper = somePaper;
		myPaper.setVisible(true);
		paperSize = myPaper.getTheSize();
		x = 0; y = 0;
		direction = EAST;
		penActive = false;
		symbol = '*';
	}	
	
	//--------------------------------------------Methoden
	
	public void move(int distance) {
		//requires: distance >= 0;
		//requires: direction in 0..3;
		//requires: 0 <= x,y < paperSize;
		//movement stops at edge of paper
		
		int startX = x, startY = y;
		if (distance < 0){
			System.out.println("distance < 0 ignored");
			return;
		}
	
		switch (direction) {
		
			case NORTH:
			
				y = Math.max(y - distance, 0);
				if (penActive)
					for (int i = startY; i > y; i--)
						myPaper.mark(i,x,symbol);
				break;
			
			case SOUTH:
			
				y = Math.min(y + distance, paperSize-1);
				if (penActive)
					for (int i = startY; i < y; i++)
						myPaper.mark(i,x,symbol);
				break;
				
			case WEST:
			
				x = Math.max(x - distance, 0);
				if (penActive)
					for (int i = startX; i > x; i--)
						myPaper.mark(y,i,symbol);
				
				break;
			
			case EAST:
			
				x = Math.min(x + distance, paperSize-1);
				if (penActive)
					for (int i = startX; i < x; i++)
						myPaper.mark(y,i,symbol);
				
				break;
		}		
	}	
	
	public void penUp() {
		penActive = false;
	}
	public void penDown(){
		penActive = true;	
	}	
	public void left() {
		// requires: direction in 0..3;
	
		switch (direction) {
		
			case NORTH:
				direction = WEST; break;
			case WEST:
				direction = SOUTH; break;
			case SOUTH:
				direction = EAST; break;
			case EAST:
				direction = NORTH; break;
		
		}
	}
	public void right() {
		// requires: direction in 0..3;
		switch (direction) {
			case NORTH:
				direction = EAST; break;
			case EAST:
				direction = SOUTH; break;
			case SOUTH:
				direction = WEST; break;
			case WEST:
				direction = NORTH; break;
		}
	}
	public void setSymbol(char someSymbol){
		symbol = someSymbol;
	}
	public void setPaper(Paper somePaper){
		myPaper = somePaper;
	}
	public Paper getPaper(){
		return myPaper;
	}
}
Code:
package turtle;

import javax.swing.*;
import java.awt.*;

public class TurtleFrame extends JFrame {
	
	private Paper p[] = new Paper[2];
	private static int size;
	private Turtle t[] = new Turtle[2];

	public TurtleFrame() {
		super();
		setLayout(new FlowLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		for(int i = 0; i<p.length; i++) {
			p[i] = new Paper(size);
			t[i] = new Turtle(p[i]);
			add(p[i]);
		}
		setExtendedState(JFrame.MAXIMIZED_BOTH);
		setVisible(true);		
	}
	public void doAction() {
		t[0].move(50);
		t[0].penDown();
		t[0].move(1);
		t[0].penUp();
		t[0].right();
		t[0].move(1);
		t[0].right();
		t[0].move(2);
		t[0].penDown();
		t[0].right();
		t[0].right();		
		t[0].move(2);
		p[0].setForeground(Color.black);
		p[0].setBackground(Color.white);
		p[0].display();
		
		t[1].move(50);
		t[1].penDown();
		t[1].move(1);
		t[1].penUp();
		t[1].right();
		t[1].move(1);
		t[1].right();
		t[1].move(2);
		t[1].penDown();
		t[1].right();
		t[1].right();		
		t[1].move(2);
		p[1].setForeground(Color.white);
		p[1].setBackground(Color.black);
		p[1].display();
	}
	
	public static void main(String args[]) {
		size = 100;
		new TurtleFrame().doAction();
	}
}

schau dir die doAction()-methode in TurtleFrame an...

wie gesagt, hab das schnell auf 10 minuten gemacht...
 
Mitglied seit
04.01.2004
Beiträge
1.480
Reaktionen
0
jo danke aber da sind weitaus zu viele sachen drin die wir noch nicht behandelt haben, da würde ich ordentlich in erklärungsnot kommen falls ich mein script beschreiben müsste, werds wohl ohne farben machen müssen :(
 
Oben