paint überschreiben in Subkomponenten

Status
Nicht offen für weitere Antworten.
S

SlaterB

Gast
wie funktioniert das paint-Überschreiben in AWT?
ich finde nur Beispiele, in denen paint direkt im Frame überschrieben wird, was auch gut funktioniert,

aber wenn ich Subkomponenten einfüge und die paint überschreiben soll funktioniert das bei mir nicht
(deren paint wird beim repaint() des Frames nicht aufgerufen)

Beispiel:

Code:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test extends Frame {
	public Test() {
		super("Test");

		setSize(300, 300);
		add(new MyPanel());
		setVisible(true);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

	}

	public void paint(Graphics g) {
		super.paint(g);
		System.out.println("paint in frame"); 
		// erscheint 10x bei 10x repaint(), alle Sekunde einmal
	}

	public static void main(String[] args) {
		Test t = new Test();
		for (int i = 0; i < 10; i++) {
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			t.repaint();
		}
	}

	class MyPanel extends Panel {

		public MyPanel() {
			add(new MyPanel2());
			setSize(300, 300);
			setBackground(Color.BLUE);
		}

		public Dimension getPreferredSize() {
			return new Dimension(300, 300);
		}
		public void paint(Graphics g) {
			super.paint(g);
			System.out.println("paint in mypanel");  
			// erscheint nur am Anfang bzw. bei Minimieren/ Maximieren
		}

	}
	class MyPanel2 extends Panel {

		public MyPanel2() {
			setSize(300, 300);
			setBackground(Color.GREEN);
		}
		public Dimension getPreferredSize() {
			return new Dimension(300, 300);
		}

		public void paint(Graphics g) {
			super.paint(g);
			//setSize(300, 300);
			System.out.println("paint in mypanel2");  
			// erscheint nur am Anfang bzw. bei Minimieren/ Maximieren
		}

	}
}

--------------------

ein anderes Problem:
die setSize()-Aufrufe haben bei den Unterpanels keine Wirkung

gibt es eine andere Möglichkeit die Größe zu setzen außer getPreferredSize() zu überschreiben?

wenn ich übrigens in paint setSize(300, 300); aufrufe, dann passiert da auf einmal etwas..
(bei Interesse bitte ausprobieren, getPreferredSize() auskommentieren)
 

Wildcard

Top Contributor
aber wenn ich Subkomponenten einfüge und die paint überschreiben soll funktioniert das bei mir nicht
(deren paint wird beim repaint() des Frames nicht aufgerufen)
API hat gesagt.:
Paints the container. This forwards the paint to any lightweight components that are children of this container. If this method is reimplemented, super.paint(g) should be called so that lightweight components are properly rendered. If a child component is entirely clipped by the current clipping setting in g, paint() will not be forwarded to that child.
ein anderes Problem:
die setSize()-Aufrufe haben bei den Unterpanels keine Wirkung

gibt es eine andere Möglichkeit die Größe zu setzen außer getPreferredSize() zu überschreiben?
setSize hat schon eine Wirkung, wird jedoch gleich darauf vom LayoutManager erneut aufgerufen und damit wirkungslos.
Du musst getPreferredSize nicht überschreiben, du kannst auch setPreferredSize verwenden.
 
S

SlaterB

Gast
heißt das auf Deutsch, dass es ganz einfach unmöglich ist,
über ein repaint() auf dem Frame das Zeichnen der Unterkomponenten auszulösen wenn diese Heavy sind
oder gibts da doch einen Trick?

das Swing-Beispiel
http://java.sun.com/products/jfc/tsc/articles/painting/src/PaintDemo.java
brachte mich mal auf die Idee, Canvas und Component auszuprobieren,
bei Canvas siehts genauso wie bei Panel aus, nur einmal gezeichnet,
Component wird dagegen anscheinend bei jedem repaint gezeichnet,
allerdings kann man in Component keine Unterkomponenten einfügen, hilft also nicht ultimativ weiter

--------------

setPreferredSize gibts nur bei JComponent oder?
 

Wildcard

Top Contributor
heißt das auf Deutsch, dass es ganz einfach unmöglich ist,
über ein repaint() auf dem Frame das Zeichnen der Unterkomponenten auszulösen wenn diese Heavy sind
oder gibts da doch einen Trick?
Vieleicht gibt's einen Trick, aber AWT benutze ich eigenltich nie...
Du könntest eigene Komponenten basteln die ihre Kinder zum zeichnen auffordern.

bei Canvas siehts genauso wie bei Panel aus, nur einmal gezeichnet,
Component wird dagegen anscheinend bei jedem repaint gezeichnet,
Liegt daran das Component lightweight ist.

setPreferredSize gibts nur bei JComponent oder?
http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Component.html#setPreferredSize(java.awt.Dimension)
 
S

SlaterB

Gast
na gut, 1.5 mal wieder ;)

System.out.println(isLightweight());
lieferte bei mir auch bei Component false, aber in der API steht ja auch

This method will always return <code>false</code> if this component is not displayable because it is impossible to determine the weight of an undisplayable component.
 

Wildcard

Top Contributor
Component selbst ist eigentlich noch nichts:
The Component class is the abstract superclass of the nonmenu-related Abstract Window Toolkit components. Class Component can also be extended directly to create a lightweight component. A lightweight component is a component that is not associated with a native opaque window.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
I JFrame => paint überschreiben AWT, Swing, JavaFX & SWT 5
U paint(Graphics g) überschreiben? AWT, Swing, JavaFX & SWT 7
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
frager2345 Warum paintComponent hier und nicht paint AWT, Swing, JavaFX & SWT 2
U Was ist der Unterschied von paint und paincomponent? AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
L Berechnungen in paint AWT, Swing, JavaFX & SWT 8
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S 2 Paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
J zwei Paint methoden in einer Klasse AWT, Swing, JavaFX & SWT 3
P Paint und paintComponent AWT, Swing, JavaFX & SWT 12
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S 2 paint-Methoden in einer Klasse ? AWT, Swing, JavaFX & SWT 2
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
S paint() verzögern AWT, Swing, JavaFX & SWT 9
K AWT begrenzte anzahl paint aufrufe AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
L AWT paint mit ArrayList und Iterator AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
L Swing 64bit Problem mit paint/paintComponent AWT, Swing, JavaFX & SWT 7
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
T JFrame und paint() AWT, Swing, JavaFX & SWT 5
B Ablauf der paint-Methoden von JComponents AWT, Swing, JavaFX & SWT 20
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Hostkomponentengröße in paint AWT, Swing, JavaFX & SWT 2
L JFrame an Paint-Inhalt anpassen AWT, Swing, JavaFX & SWT 6
E Warum übermalt paint das ganze Fenster? AWT, Swing, JavaFX & SWT 15
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
T paint() wird nicht aufgerufen AWT, Swing, JavaFX & SWT 8
M JMenuBar im Applet und paint AWT, Swing, JavaFX & SWT 9
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
H paint überlappend AWT, Swing, JavaFX & SWT 5
E paint AWT, Swing, JavaFX & SWT 3
H Swing paint() von JPanel wird nicht aufgerufen AWT, Swing, JavaFX & SWT 10
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
S JCheckBox Paint AWT, Swing, JavaFX & SWT 7
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2
C Unterschiedlicher Aufruf der paint() Methode ? (AWT/Swing) AWT, Swing, JavaFX & SWT 2
L Problem mit paint Methode und Bild AWT, Swing, JavaFX & SWT 7
F Swing Paint mit Canvas Element AWT, Swing, JavaFX & SWT 35
K AWT paint wird nicht aufgerufen AWT, Swing, JavaFX & SWT 7
R LayoutManager Image Paint + Text Panel AWT, Swing, JavaFX & SWT 10
F paint-Methode des JComboboxEditorComponent AWT, Swing, JavaFX & SWT 2
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
radiac Swing JFrame - paint(g) - FrameObjects bei activeRendering AWT, Swing, JavaFX & SWT 3
I AWT paint() in MouseEvent aufrufen klappt nicht AWT, Swing, JavaFX & SWT 8
T paint() wird zweimal ausgeführt AWT, Swing, JavaFX & SWT 6
hdi Swing JLabel & paint-Methode gemixt - wie schlimm wirklich? AWT, Swing, JavaFX & SWT 5
N Paint methode anhalten und neustarten AWT, Swing, JavaFX & SWT 5
H AWT Wann ist paint() fertig? AWT, Swing, JavaFX & SWT 7
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
W Steuerelemente und paint() in einem JPanel AWT, Swing, JavaFX & SWT 3
M Allgemeines zur paint Methode AWT, Swing, JavaFX & SWT 5
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Dialog ohne Frame, direktes paint in graphics AWT, Swing, JavaFX & SWT 5
G Probleme mit repaint / paint AWT, Swing, JavaFX & SWT 6
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
K repaint() ruft paint() nicht auf AWT, Swing, JavaFX & SWT 14
J Canvas / paint() AWT, Swing, JavaFX & SWT 2
bugmenot paint() verzögert ausgeführt? AWT, Swing, JavaFX & SWT 4
S paint() in anderen Methoden AWT, Swing, JavaFX & SWT 5
J getFontMetrics außerhalb von paint(Graphics g) AWT, Swing, JavaFX & SWT 8
D Paint() Methode aus einer anderen Klasse aufrufen AWT, Swing, JavaFX & SWT 6
H paint verwenden AWT, Swing, JavaFX & SWT 3
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
A Paint funktioniert nicht richtig AWT, Swing, JavaFX & SWT 7
L Dynamisches Ändern der Größe in JPanel mit paint()-Methode AWT, Swing, JavaFX & SWT 8
G JScrollPane mit "paint" scrollt nicht AWT, Swing, JavaFX & SWT 2
hdi meine paint-methode macht faxen? AWT, Swing, JavaFX & SWT 21
T Variable Menge an Bildern außerhalb paint() zeichnen? AWT, Swing, JavaFX & SWT 2
G Paint und Buttons AWT, Swing, JavaFX & SWT 8
G JFrame JPanel und Paint(Image)? AWT, Swing, JavaFX & SWT 6
S Programm aufgrund von paint() zu langsam AWT, Swing, JavaFX & SWT 18
G paint() wird aufgerufen, aber nicht angezeigt AWT, Swing, JavaFX & SWT 10
G 2x Graphics in einer paint() miteinander verbinden AWT, Swing, JavaFX & SWT 11
M Probleme mit paint() aus JFrame AWT, Swing, JavaFX & SWT 2
G paint() Methode aus anderer klasse aufrufen? AWT, Swing, JavaFX & SWT 6
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
D JPanel und Paint AWT, Swing, JavaFX & SWT 2
B Gui und Zeichnen (paint ? ) AWT, Swing, JavaFX & SWT 4
L Anzeigen von fotos: ImageIcon oder BufferedImage + paint() ? AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben