einfache Frage zu paintComponent und Graphics

ernst

Top Contributor
Hallo allerseits,
in einem Demo-Programm (mit Netbeans erstellt und dem zugehörigen grafischen Editor) will ich zu Testzwecken immer wieder eine andere Ellipse in einen Offscreen schreiben und dann den ganzen Offscreen auf dem Bildschirm ausgeben.
Dazu erstelle ich das Attribut gesamtbild mit dem zugehörigen Grafikkontext gesamtGraphics (auch ein Attribut).
Die Ellipsen werden dann immer wieder in den gesamtGraphics Kontext geschrieben mit:
gesamtGraphics.drawOval(testi, testi, 30, 30);
Leider erscheinen sie nicht auf dem Bildschirm.

Wo ist mein Denkfehler ?

mfg
Ernst

[Java]
package packRandom2;

public class SpielJFrame extends javax.swing.JFrame {
SpielJPanel spielJPanel;
/** Creates new form SpielJFrame */
public SpielJFrame() {
initComponents();
spielJPanel = new SpielJPanel();
setSize(900, 700);
// An die Zeichenfläche muss das SpielJFrame montiert werden.
jPanel1.add(spielJPanel, "Center");
// --- Ende Einfügen ---

}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBackground(new java.awt.Color(153, 255, 153));
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jPanel1.setLayout(new java.awt.BorderLayout());

org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(25, 25, 25)
.add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 450, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(25, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(22, 22, 22)
.add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 322, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(21, Short.MAX_VALUE))
);

pack();
}// </editor-fold>

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new SpielJFrame().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
// End of variables declaration

}

[/Java]


[Java]
package packRandom2;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class SpielJPanel extends javax.swing.JPanel {
// --- Beginn Einfügen ---
private int flag = 0;
private Timer t;
//private Ball ball;
private Image gesamtBild;
private Graphics gesamtGraphics;
private int testi;
// --- Ende Einfügen ---

public SpielJPanel() {
initComponents();
// --- Beginn Einfügen ---
// ball = new Ball(this);
t = new Timer(2,
new ActionListener() {

public void actionPerformed(ActionEvent ae) {
allesUpdaten();
zeichneAllesOffscreen();
repaint();
}
});

t.start();
}

public void setTimer(int millis) {
t.setDelay(millis);
}

public int getTimerTime() {
return t.getDelay();
}

public void allesUpdaten() {
//ball.berechnePos();
}

// Alte Bildschirm wird nicht gelöscht
public void zeichneAllesOffscreen(){
int sx, sy;
sx = this.getSize().width;
sy = this.getSize().height;
//System.out.println("sx="+sx+"=sy="+sy);
if(sx!=0 && sy!=0){
if(flag==0){
// Dieser Teil wird genau einmal gemacht !!
flag=1;
System.out.println("flag="+flag);
// Erzeuge ein Bild
gesamtBild = createImage(sx, sy);
// Erzeuge den zum Grafikobjekt bild zugehörigen Grafikkontext,
// d.h. eine Leinwand, in die gemalt wird.
gesamtGraphics = gesamtBild.getGraphics();
System.out.println("sxx="+sx+" syy="+sy);
}
testi=testi+1;
System.out.println("testi="+testi);
gesamtGraphics.setColor(Color.red);
// Zeichne auf die Leinwand und damit in gesamtBild !
gesamtGraphics.drawOval(testi, testi, 30, 30);
//ball.zeichne(gesamtGraphics, Color.magenta);
}
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
//g.setColor(this.getBackground());
// Point pos;
// pos = ball.getPos();
// g.drawImage(ball.getImage(), pos.x, pos.y, this);
//g.drawImage(gesamtBild, pos.x, pos.y, this);
//g.drawImage(gesamtBild, pos.x, pos.y, this);
// Zeichne das gesamtBild auf die Ausgabe-Leinwand
g.drawImage(gesamtBild, 0, 0, this);
}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();

setBackground(new java.awt.Color(255, 255, 255));
setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
setLayout(new java.awt.BorderLayout());

jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jPanel1.setLayout(new java.awt.BorderLayout());
add(jPanel1, java.awt.BorderLayout.CENTER);
}// </editor-fold>


// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
// End of variables declaration

}

[/Java]
 
G

Gast2

Gast
Ich denke mal weil du in deinem JPanel nochmals ein JPanel1 eins hast und das alles verdeckt...
 

ernst

Top Contributor
Ich denke mal weil du in deinem JPanel nochmals ein JPanel1 eins hast und das alles verdeckt...

Das folgende Programm ist nach dem gleichen Schema aufgebaut (auch mit Netbeans und mit JPanel1).
Nur wird jetzt jedesmal der alte Bildschirminhalt gelöscht.
Aber jetzt wird das Bild auf dem Bildschirm ausgegeben.
Warum hier und nicht im alten Programm?

mfg
Ernst

[Java]
package packRandom1;

public class SpielJFrame extends javax.swing.JFrame {
private SpielJPanel spielJPanel;
/** Creates new form SpielJFrame */
public SpielJFrame() {
initComponents();
// --- Beginn Einfügen ---
spielJPanel = new SpielJPanel();
setSize(900, 700);
// An die Zeichenfläche muss das SpielJFrame montiert werden.
jPanel1.add(spielJPanel, "Center");
// --- Ende Einfügen ---

}

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jPanel1 = new javax.swing.JPanel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setBackground(new java.awt.Color(51, 255, 255));

jPanel1.setBackground(new java.awt.Color(255, 255, 153));
jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
jPanel1.setLayout(new java.awt.BorderLayout());

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, 318, Short.MAX_VALUE)
.addContainerGap())
);

pack();
}// </editor-fold>

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new SpielJFrame().setVisible(true);
}
});
}

// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
// End of variables declaration

}

[/Java]

[Java]
package packRandom1;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class SpielJPanel extends javax.swing.JPanel {
// --- Beginn Einfügen ---
private int testi;
private Timer t;
private Ball ball;
private Image bild;
// --- Ende Einfügen ---

public SpielJPanel() {
initComponents();
// --- Beginn Einfügen ---
//ball = new Ball(this);
t = new Timer(2,
new ActionListener() {

public void actionPerformed(ActionEvent ae) {
allesUpdaten();
zeichneAllesOffscreen();
repaint();
}
});

t.start();
}

public void setTimer(int millis) {
t.setDelay(millis);
}

public int getTimerTime() {
return t.getDelay();
}

public void allesUpdaten() {
//ball.berechnePos();
}

public void zeichneAllesOffscreen(){
Graphics graphics;
int sx, sy;
sx = this.getSize().width;
sy = this.getSize().height;
System.out.println("sx="+sx+"=sy="+sy);
if(sx!=0 && sy!=0){
bild = createImage(sx, sy);
// Erzeuge den zu dem Grafikobjekt bild zugehörigen Grafikkontext,
// d.h. eine Leinwand, in die gemalt wird.
graphics = bild.getGraphics();
graphics.fillOval(testi, testi, 30, 30);
//ball.zeichne(Graphics, Color.magenta);
}
testi++;
}




public void paintComponent(Graphics g) {
super.paintComponent(g);
//g.setColor(this.getBackground());
//Point pos;
//pos = ball.getPos();
// g.drawImage(ball.getImage(), pos.x, pos.y, this);
//g.drawImage(bild, pos.x, pos.y, this);
g.drawImage(bild, 0, 0, this);
}
// --- Ende Einfügen Barner ---

/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

setBackground(new java.awt.Color(204, 255, 204));
setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
setLayout(new java.awt.BorderLayout());
}// </editor-fold>


// Variables declaration - do not modify
// End of variables declaration

}

[/Java]
 
G

Gast2

Gast
Das folgende Programm ist nach dem gleichen Schema aufgebaut (auch mit Netbeans und mit JPanel1).
Nur wird jetzt jedesmal der alte Bildschirminhalt gelöscht.
Aber jetzt wird das Bild auf dem Bildschirm ausgegeben.
Warum hier und nicht im alten Programm?

mfg
Ernst

Nein eben nicht ^^...

Schau dir mal inSpielJPanel die Member variablen an und vor allem die
Code:
private void initComponents() {
da ist ein JPanel1 mehr drin...
 

ernst

Top Contributor
Nein eben nicht ^^...

Schau dir mal inSpielJPanel die Member variablen an und vor allem die
Code:
private void initComponents() {
da ist ein JPanel1 mehr drin...

Aaaaaah, du hast recht !!! Vielen Dank!!
Ich war betriebsblind (habe aus versehen in SpielJPanel) auch einen Panel reingezogen.
Ich hatte meinen Fehler an einer ganz anderen Stelle gesucht.
Meine Überlegungen zu gesamtGraphis und gesamtBild sind somit richtig, oder ?

mfg
Ernst
 
G

Gast2

Gast
Aaaaaah, du hast recht !!! Vielen Dank!!
Ich war betriebsblind (habe aus versehen in SpielJPanel) auch einen Panel reingezogen.
Ich hatte meinen Fehler an einer ganz anderen Stelle gesucht.
Meine Überlegungen zu gesamtGraphis und gesamtBild sind somit richtig, oder ?

mfg
Ernst

Ja ich versteht net warrum nicht einfach aufs panel gleich malst...
 
G

Gast2

Gast
Siehe
http://www.java-forum.org/awt-swing-swt/95959-paintcomponent-aufgerufen.html

Dort habe ich mit dem Visual-Editor von Netbeans direkt in den JFrame ein von mir erzeugtes MyJPanel eingebunden.
Dann wurde nicht mehr repaint aufgerufen.
Hast du eine Idee, was man machen muß, damit repaint dann aufgerufen wird?

mfg
Ernst

Wurde doch alles gesagt in dem Thread... Keinen GUI Builder verwenden der so einen häßlichen unleserlichen Code erzeugt und das kleine Progrämchen selber machen. Wärst wahrscheinlich gleich schnell gewesen...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
L Einfache Layout Frage für Applet -> Was mache ich bloss falsch? AWT, Swing, JavaFX & SWT 2
E Swing Einfache Frage zu JMenu AWT, Swing, JavaFX & SWT 4
E Einfache Frage zu GridBagLayout AWT, Swing, JavaFX & SWT 30
E einfache Frage zu invokeLater() AWT, Swing, JavaFX & SWT 4
E Einfache Frage zu GridLayout AWT, Swing, JavaFX & SWT 35
M einfache Frage über SWT GUI-Programmierung AWT, Swing, JavaFX & SWT 3
S Einfache Thread-Frage AWT, Swing, JavaFX & SWT 3
G Einfache Frage Panel AWT, Swing, JavaFX & SWT 5
Jose05 einfache GUI mit schwarzem Feld AWT, Swing, JavaFX & SWT 12
X JavaFX Einfache FX Application, aber wie alte Features umgehen? AWT, Swing, JavaFX & SWT 10
B AWT einfache Stoppuhr -Verbesserungsvorschläge AWT, Swing, JavaFX & SWT 2
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
A Einfache Benutzeroberfläche wie realisieren? AWT, Swing, JavaFX & SWT 6
P Swing Einfache Eingabe in JTextfield wird nicht ausgegeben AWT, Swing, JavaFX & SWT 3
E EINFACHE Verständnisfrage zu repaint(), paintComponent(), usw. AWT, Swing, JavaFX & SWT 16
V Swing Einfache Graphen-Lib? AWT, Swing, JavaFX & SWT 2
A Swing einfache fragen zu frame AWT, Swing, JavaFX & SWT 10
iLoveTheInternet Einfache Grafikausgabe AWT, Swing, JavaFX & SWT 2
B Einfache jpg-Bilder anzeigen AWT, Swing, JavaFX & SWT 8
H einfache Buttonanzeige AWT, Swing, JavaFX & SWT 2
M Einfache Möglichkeit einen Login Dialog zu bauen? AWT, Swing, JavaFX & SWT 1
G Einfache Text formatierung? Wie? AWT, Swing, JavaFX & SWT 4
O Suche einfache Möglichkeit zum Speichern AWT, Swing, JavaFX & SWT 21
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben