Hallo Zusammen,
im folgenden findet sich ein Programm, das farbige Felder auf den Bildschirm zeichnet und diese nach einem "künstlerischen" Algorithmus verändert.
Ich würde gerne meine Java-Stil perfektionieren, vielleicht könnt Ihr mir zur Struktur meines Programms ein paar Tipps geben. Vielleicht sollte man die Klassen anders aufteilen, um eine bessere Objektorientierung zu erreichen?
Außerdem ist es so, dass nach mehreren Starts des Programms Windows eine Fehlermeldung wirft "Bitte Problembericht senden ..".
Könnte es daran liegen, dass man den JFrame auf irgend eine Art korrekt schließen muss?
Grüße,
robochris
P.s:
Wenn ihr Lust habt, könnt Ihr auch mal versuchen, einen noch schöneren Algortihmus für die Farben der Kacheln zu finden.
In der einer späteren Version möchte ich die Farbe der Kacheln durch anklicken der einzelnen Kacheln verändern können.
im folgenden findet sich ein Programm, das farbige Felder auf den Bildschirm zeichnet und diese nach einem "künstlerischen" Algorithmus verändert.
Ich würde gerne meine Java-Stil perfektionieren, vielleicht könnt Ihr mir zur Struktur meines Programms ein paar Tipps geben. Vielleicht sollte man die Klassen anders aufteilen, um eine bessere Objektorientierung zu erreichen?
Außerdem ist es so, dass nach mehreren Starts des Programms Windows eine Fehlermeldung wirft "Bitte Problembericht senden ..".
Könnte es daran liegen, dass man den JFrame auf irgend eine Art korrekt schließen muss?
Grüße,
robochris
P.s:
Wenn ihr Lust habt, könnt Ihr auch mal versuchen, einen noch schöneren Algortihmus für die Farben der Kacheln zu finden.
In der einer späteren Version möchte ich die Farbe der Kacheln durch anklicken der einzelnen Kacheln verändern können.
Java:
/**
* mkbox simulator, ein kleines Kunstprogramm
* zeichnet und verändert farbige Kacheln auf dem Bildschirm
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ChMkBox1 extends JFrame{
private static final long serialVersionUID = 7353L;
JFrame fenster;
Zeichenflaeche zeichenflaeche;
int sizeX=510;
int sizeY=520;
Kachel[] kachelFeld;
int anzahlKacheln=64;
public int kachelCounter=0;
public ChMkBox1(){
fenster=new JFrame("mkbox");
fenster.setSize(sizeX,sizeY);
fenster.setBackground(Color.BLACK);
kachelFeld =new Kachel[anzahlKacheln];
int n;
for(n=0;n<kachelFeld.length;n++)
kachelFeld[n]=new Kachel(Color.BLUE);
fenster.setVisible(true);
zeichenflaeche=new Zeichenflaeche();
fenster.add(BorderLayout.CENTER,zeichenflaeche);
fenster.repaint();
for(n=0;n<64;n++){
kachelFeld[n].setColor(n*4, 250-n*4, 0);
fenster.repaint();
try {Thread.sleep(30);} catch (InterruptedException e){};
}
for(n=0;n<64*16;n++){
kachelFeld[zufall(anzahlKacheln-1)].setColor(zufall(255), zufall(255), zufall(255));
fenster.repaint();
try {Thread.sleep(100);} catch (InterruptedException e){};
}
}
public class Kachel{
int xpos=0;
int ypos=0;
int xdim=50;
int ydim=50;
int kachelFeldBreite=8;
int rand=10;
Color farbe;
public Kachel(Color neueFarbe){
farbe=neueFarbe;
xdim=50;
ydim=50;
xpos=rand + (kachelCounter%kachelFeldBreite)*(xdim+rand);
ypos=rand + (kachelCounter/kachelFeldBreite)*(ydim+rand);;
kachelCounter++;
}
public Kachel(){
this(Color.BLACK);
}
public void setColor(int r,int g, int b){
if(r>255)r=255;
if(r<0)r=0;
if(g>255)g=255;
if(g<0)g=0;
if(b>255)b=255;
if(g<0)g=0;
farbe=new Color(r,g,b);
}
public void zeichnen(Graphics g){
g.setColor(farbe);
g.fillRect(xpos,ypos,xdim,ydim);
}
}
public class Zeichenflaeche extends JPanel{
private static final long serialVersionUID = 1L;
public Zeichenflaeche(){
}
public void paint(Graphics g)
{
for(Kachel k:kachelFeld){
k.zeichnen(g);
}
}
}
public static int zufall(int scale){
double zufall=Math.random();
int z=(int)Math.round(zufall*scale);
return z;
}
public static void main(String[] args)
{
//ChMkBox box=new ChMkBox();
new ChMkBox1();
}
}
/**
* mkbox simulator, ein kleines Kunstprogramm
*
* @author robo.fr ( Nickname )
* @version 0.1
* @since 11.1.2011
* Vollgnu-Programm
* Dieses Programm ist freie Software: jeder darf es basierend auf der
* GNU General Public License Version 2 verteilen und modifizieren.
*
* Bitte jeder Autor seinen Nicknamen in den Header eintragen.
*/