Swing Aktualisierung des Bildes

Wazer

Mitglied
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.
 

Michael...

Top Contributor
Da gibt's mehrere Probleme:
zum einen hat JFrame standardmäßig ein BorderLayout und mit JFrame#add() fliegt die zuvor eingefügte Komponente/Block aus dem Layout und wird durch die neue ersetzt.
Zum anderen muss die while Schleife in einem separaten Thread laufen.
Bevor Du hier ein Tetris nachbaust würde ich mir deshalb folgende Themen anschauen:
- Umgang mit Swing
- Zeichnen mit Swing
- Threads
 

Wazer

Mitglied
Ich muss noch mal paar Verständnissfragen stellen, ohne die ich nicht weiter komme (da sich das irgendwie auf den Code oben bezieht, schreib ich es hier rein ):

1. Ich hab mich gewundert, warum meine Hintergrundfarbe nicht angezeigt wird. Kann es sein, dass durch das JPanel, was ich durch Block drüberlege, die Farbe bestimmt? Wenn ja, wie kann ich dessen Hintergrund unsichtbar machen? Oder wäre es schlauer, diese Blöcke über das GlassPane Prinzip laufen zu lassen?

2. Muss ich den Blöcken einen eigenen Thread erstellen? Diesen dann mit invokeandwait() nach gewisser Zeit einordnen, mit Hilfe des Swing.Timer s und des run() Befehls?

Irgendwie scheine ich langsam die Möglichkeiten zu verstehen, aber zur Anwendung kommt es noch nicht :oops:

€: Was ich noch hinzufügen sollte dass ich den Anfang ein wenig geändert habe
[JAVA=9] JFrame f = new JFrame();

int x = 0;
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 500);
Block b = new Block();
f.add(b);
f.getContentPane().setBackground(Color.red);
f.setVisible(true);
[/code]
 
Zuletzt bearbeitet:

Michael...

Top Contributor
zu 1) JFrame besitzt standardmäßig ein BorderLayout, Komponenten die per add() auf den Frame gesetzt werden, werden im CENTER Bereich platziert und nehmen diesen komplett ein, dadurch überdeckt die Hintergrundfarbe des Panels die des Frames.
zu 2) mit solchen Themen sollte man sich intensiv auseinander setzen z.B. durch Lesen ;-)
Threads und Nebenläufigkeit

Ich persönlich würde ein JPanel nehmen und auf diesem alle Block zeichnen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Aktualisierung eines Bildes innerhalb einer Komponente AWT, Swing, JavaFX & SWT 7
M TableView + Datenbank Aktualisierung AWT, Swing, JavaFX & SWT 4
N Aktualisierung des Fensters AWT Java ohne Ruckeln AWT, Swing, JavaFX & SWT 3
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
O JavaFX Aktualisierung der Scene AWT, Swing, JavaFX & SWT 1
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
F Textfeld Währungszahlen und automatische Aktualisierung AWT, Swing, JavaFX & SWT 14
J Denkfehler bei Aktualisierung eines GUI AWT, Swing, JavaFX & SWT 4
S JTable nach aktualisierung - neue Zeile nicht "klickbar" AWT, Swing, JavaFX & SWT 0
T Tetris - Gui Aktualisierung AWT, Swing, JavaFX & SWT 2
Y JFormattedTextfield - Aktualisierung und Beschränkung AWT, Swing, JavaFX & SWT 4
dzim TableView - keine Aktualisierung geänderter Items AWT, Swing, JavaFX & SWT 5
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
D JTable Aktualisierung nach hinzufügen eines Datensatzes AWT, Swing, JavaFX & SWT 7
B Problem bei der Aktualisierung des Frames AWT, Swing, JavaFX & SWT 6
lumo SWT Resize und aktualisierung der gui AWT, Swing, JavaFX & SWT 6
B GUI Aktualisierung aus/und eventListener AWT, Swing, JavaFX & SWT 3
S Swing Aktualisierung Fensters AWT, Swing, JavaFX & SWT 7
K Modaler Dialog aber trotzdem Aktualisierung des MainFrames AWT, Swing, JavaFX & SWT 6
C JTable-Aktualisierung leidiges Thema AWT, Swing, JavaFX & SWT 18
Plastagen JTextArea CaretPosition Aktualisierung AWT, Swing, JavaFX & SWT 10
C permanente aktualisierung der Koordinaten der Maus auf einem Panel AWT, Swing, JavaFX & SWT 8
U JComboBox: (Vor)auswahl nach Aktualisierung AWT, Swing, JavaFX & SWT 2
kodela Swing Problem mit sofortiger Aktualisierung eine Textfeldes AWT, Swing, JavaFX & SWT 8
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
T Aktualisierung einer JComboBox -> RepaintProblem! AWT, Swing, JavaFX & SWT 3
H Aktualisierung Gui AWT, Swing, JavaFX & SWT 5
G Bessere Aktualisierung eines Frames AWT, Swing, JavaFX & SWT 5
P Problem bei Aktualisierung eines JPanels AWT, Swing, JavaFX & SWT 2
S Aktualisierung der GUI AWT, Swing, JavaFX & SWT 6
S Aktualisierung in regelmäßigen Abständen AWT, Swing, JavaFX & SWT 2
L Problem mit der aktualisierung von JTree und Text Area AWT, Swing, JavaFX & SWT 22
F Aktualisierung während MOUSE_PRESSED AWT, Swing, JavaFX & SWT 4
M swt - problem mit aktualisierung des tableeditors AWT, Swing, JavaFX & SWT 3
G Aktualisierung der Ausgabe in SWT AWT, Swing, JavaFX & SWT 2
A JTable - Aktualisierung und Spaltenbreite AWT, Swing, JavaFX & SWT 5
D Aktualisierung von GUI AWT, Swing, JavaFX & SWT 11
W JTextArea als Logausgabe und Aktualisierung AWT, Swing, JavaFX & SWT 3
C zu späte aktualisierung/repaint AWT, Swing, JavaFX & SWT 3
X Probleme mit aktualisierung durch Repaint() Methode AWT, Swing, JavaFX & SWT 3
R Thread-Problem (Aktualisierung von JLabel-Komponente) AWT, Swing, JavaFX & SWT 9
M problem mit textfield-aktualisierung AWT, Swing, JavaFX & SWT 4
G JScrollPane problem mit aktualisierung der daten AWT, Swing, JavaFX & SWT 3
L Aktualisierung bei JTabbedPane AWT, Swing, JavaFX & SWT 3
T Swing bei Realtime-Aktualisierung zu langsam? AWT, Swing, JavaFX & SWT 10
M JCombobox aktualisierung, beim wecheseln des Tab JTabbedPane AWT, Swing, JavaFX & SWT 3
F Swing Rotation eines Bildes mit beliebigen Koordinaten um den Mittelpunkt AWT, Swing, JavaFX & SWT 3
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
J 2D-Grafik Windows Blue-Screen nach anzeigen eines Bildes in Java AWT, Swing, JavaFX & SWT 10
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
P Aufteilung eines Bildes in JLabel AWT, Swing, JavaFX & SWT 15
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
C Automatische Screenshots + Analyse des Bildes AWT, Swing, JavaFX & SWT 5
S Ich brauche eine Idee: Animation mit teil eines Bildes AWT, Swing, JavaFX & SWT 16
Developer_X Teile eines Bildes in ein Image stecken AWT, Swing, JavaFX & SWT 9
M Darstellen eines Bildes AWT, Swing, JavaFX & SWT 3
G Popup eines Bildes im JTable realisieren AWT, Swing, JavaFX & SWT 3
J resize eines Bildes automatisch berechnen lassen? AWT, Swing, JavaFX & SWT 2
D Anzeige eines Bildes: JPanel oder JLabel ? AWT, Swing, JavaFX & SWT 3
H Zugriff auf die Farbwerte eines Bildes AWT, Swing, JavaFX & SWT 6
F SWT Image: Grösse des Bildes zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
I Swing: Menü verschwindet beim Einfügen eines Bildes AWT, Swing, JavaFX & SWT 15

Ähnliche Java Themen

Neue Themen


Oben