Hallo,
eigentlich sollen jetzt nach und nach Blöcke gezeichnet werden, die sich aufeinander stapeln. Jedoch wurde sowohl das Layout zerstört (was ich zu Testzwecken rot gemacht habe) und wenn neue Blöcke gezeichnet werden, kann ich diese nur sehen, wenn ich das Fenster größer oder kleiner ziehe. Ich hab keine Ahnung wo ich anfangen sollte, zu suchen, deswegen hoffe ich, dass ihr mir helfen könnte
Anbei sind jetzt 2 Programmtexte. Erst die Main.java und dann noch die Block.java Datei. Es soll nacher so funktionieren, dass ich den aktuellen Block im Array ablege und dann eine neues Objekt produzieren kann.
[JAVA=50]public class Main extends JFrame {
private static int i;
private static boolean ende=false;
public final static int HFIELD=18;
public final static int BFIELD=10;
public static char[][] field = new char[BFIELD][HFIELD];
public static char getField(int i, int j){
return field[j];
}
public void setField(int i, int j, char c){
field[j]=c;
}
public static void initField(){
for(int i = 0; i < Main.BFIELD;i++){
for (int j = 0; j< Main.HFIELD; j++){
field[j]='q';
}
}
}
public static void main(String[] args) throws InterruptedException {
initField();
UIManager.put("Panel.background", ColorUIResource.RED);
JFrame f = new JFrame();
int x = 0;
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 200);
Block b = new Block();
f.add(b);
f.setVisible(true);
f.repaint();
KeyListener newContentPane = new KeyListen(f,b);
f.addKeyListener(newContentPane);
KeyListen k = (KeyListen) newContentPane;
while (!ende){
ende=b.moveD();
f.repaint();
if (ende){
ende = false;
b = new Block();
f.add(b);
f.repaint();
}
Thread.sleep(100);
f.repaint();
}
}
}
[/code]
[JAVA=40] import java.awt.Graphics;
import javax.swing.JPanel;
class Block extends JPanel{
/**
*
* @author Carl
*/
private String shape;
private int diff=0;
private int down=0;
public Block() {
}
@ Override
public void paintComponent(Graphics g){
g.drawRect(diff*50, down, 10, 10);
}
public void moveLR(int diff){
this.diff+=diff;
}
public boolean moveD() {
if ((down==(Main.HFIELD-1)*10) || (Main.field[(Math.round(diff/10))][(Math.round(down/10))+1]=='b') ){
Main.field[(Math.round(diff/10))][(Math.round(down/10))]='b';
return true;
} else {
down+=10;
System.out.println(down);
System.out.println((Main.HFIELD-1)*10);
return false;
}
}
public int getDiff(){
return diff;
}
}
[/code]
Danke.
eigentlich sollen jetzt nach und nach Blöcke gezeichnet werden, die sich aufeinander stapeln. Jedoch wurde sowohl das Layout zerstört (was ich zu Testzwecken rot gemacht habe) und wenn neue Blöcke gezeichnet werden, kann ich diese nur sehen, wenn ich das Fenster größer oder kleiner ziehe. Ich hab keine Ahnung wo ich anfangen sollte, zu suchen, deswegen hoffe ich, dass ihr mir helfen könnte
Anbei sind jetzt 2 Programmtexte. Erst die Main.java und dann noch die Block.java Datei. Es soll nacher so funktionieren, dass ich den aktuellen Block im Array ablege und dann eine neues Objekt produzieren kann.
[JAVA=50]public class Main extends JFrame {
private static int i;
private static boolean ende=false;
public final static int HFIELD=18;
public final static int BFIELD=10;
public static char[][] field = new char[BFIELD][HFIELD];
public static char getField(int i, int j){
return field[j];
}
public void setField(int i, int j, char c){
field[j]=c;
}
public static void initField(){
for(int i = 0; i < Main.BFIELD;i++){
for (int j = 0; j< Main.HFIELD; j++){
field[j]='q';
}
}
}
public static void main(String[] args) throws InterruptedException {
initField();
UIManager.put("Panel.background", ColorUIResource.RED);
JFrame f = new JFrame();
int x = 0;
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 200);
Block b = new Block();
f.add(b);
f.setVisible(true);
f.repaint();
KeyListener newContentPane = new KeyListen(f,b);
f.addKeyListener(newContentPane);
KeyListen k = (KeyListen) newContentPane;
while (!ende){
ende=b.moveD();
f.repaint();
if (ende){
ende = false;
b = new Block();
f.add(b);
f.repaint();
}
Thread.sleep(100);
f.repaint();
}
}
}
[/code]
[JAVA=40] import java.awt.Graphics;
import javax.swing.JPanel;
class Block extends JPanel{
/**
*
* @author Carl
*/
private String shape;
private int diff=0;
private int down=0;
public Block() {
}
@ Override
public void paintComponent(Graphics g){
g.drawRect(diff*50, down, 10, 10);
}
public void moveLR(int diff){
this.diff+=diff;
}
public boolean moveD() {
if ((down==(Main.HFIELD-1)*10) || (Main.field[(Math.round(diff/10))][(Math.round(down/10))+1]=='b') ){
Main.field[(Math.round(diff/10))][(Math.round(down/10))]='b';
return true;
} else {
down+=10;
System.out.println(down);
System.out.println((Main.HFIELD-1)*10);
return false;
}
}
public int getDiff(){
return diff;
}
}
[/code]
Danke.