Jpanel will nich alles zeichnen

Status
Nicht offen für weitere Antworten.

0din

Bekanntes Mitglied
Hallo,

Mein problem is das ich ne pinnwand am schreiben war nur leider mag mir das ding die postits nich zeichnen. Den hintergrund und die JLabel hingegen werden ohne meckern und murren gezeichnet und erneuert.
Ich weiß leider nich wieviel code nötig is um das ganze zu lösen aber ich geb mal das bedeutenste:

Java:
	@Override
	protected void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.drawImage(background, 0, 0, this);
                
/*
*Div. Positions bestimmungen...
* background => Image von JPG File
* postitRohling => Image von JPG File
*/

	
			g.drawImage(postitRohling, x, y, xWert, yWert, this);
			
			JTextArea ta1 = new JTextArea("ID: " + p.getId());
			ta1.setLineWrap(false);
			ta1.setBackground(Color.yellow);
			ta1.setSize(30, 20);
			ta1.setLocation(x+5,y+1);
			this.add(ta1);
			
			JTextArea ta2 = new JTextArea(p.getText());
			ta2.setLineWrap(true);
			ta2.setBackground(Color.yellow);
			ta2.setSize((xWert - 20), (yWert - 35));
			ta2.setLocation((x + 10), (y + 23));
			this.add(ta2);
         }
 
S

SlaterB

Gast
stehen die Befehle
this.add(ta1);
this.add(ta2);
innerhalb von paintComponent()?
das kann nicht gut gehen,
generell sollte eine Komponente entweder nur andere Komponenten enthalten oder mit paintComponent bemalt werden, besser nicht gemischt
 

0din

Bekanntes Mitglied
Die beiden adds stehen nicht direkt in der paintcomponent methode.
Da ich recht viele berechnungen etc. für die teile anstellen musste hab ich ne extra methode draus gemacht die aber direkt von paintcomponent angerufen wird.

Kann das ganze denn daran liegen das ich die JTextAreas dort hinzufüge?
Dürfte doch eigentlich nicht störend (aber unschön) sein weil ich davor die jeweiligen bildchen zeichne.
Der gedanke war das ich die bildchen zeichne und dann die JTextAreas darüber zeichnen lasse.
(Am Rande, am anfang der ganzen methode werden alle alten JTextAreas aus dem Component Container gelöscht)



Damit das ganze vllt richtig deutlich wird poste ich einfach mal den kompletten code dazu. Der Fehler sollte in der paintPostIts(Graphics g) liegen
Randnotiz: Die berechnung der positionen is net das tollste aber ich bekomme leider nichts anderes aus der DB

Java:
package view;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import java.awt.Image;

import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JPanel;
import javax.swing.JTextArea;

import model.Pinnwand;
import model.Postit;

public class Rahmen extends JPanel implements Observer
{
	private Image postitRohling;
	private Image background;
	private Pinnwand pw;
	private double PERCENTOFPOSTIT = 0.30;

	public Rahmen(Pinnwand pw)
	{
		this.pw = pw;
		this.setLayout(null);
		this.setPreferredSize(new Dimension(540, 540));
		try
		{
			postitRohling = getToolkit().getImage("images/postit.jpg");
			background = getToolkit().getImage("images/background.jpg");
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		
		for (int i = 9; i >= 0; i++)
		{
			
		}
	}
		
	private void paintPostIts(Graphics g)
	{
		/*
		 * PostIts postits werden gezeichnet, Label werden darüber gelegt
		 */
		
		//alles aus dem container killen weil sonst zich labels drin landen
		removeAll();

		ArrayList<Postit> pi = pw.getPostits();
		for (Postit p : pi)
		{
			int xWert = (int) (getWidth() * PERCENTOFPOSTIT);
			int yWert = (int) (getHeight() * PERCENTOFPOSTIT);

			int x = 0;
			int y = 0;
			
			int temp = p.getPosition();

			while(temp > 3)
			{
				temp = temp - 3;
			}
			
			switch(temp)
			{
				case 1:
				{
					x = xWert * (temp - 1) + 20;
					break;
				}
				case 2:
				{
					x = xWert * (temp - 1) + 25;
					break;
				}
			
				case 3:
				{
					x = xWert * (temp - 1) + 30;
					break;
				}
			}
			
			temp = p.getPosition();
			if(temp >= 1 && temp <= 3)
			{
				y = yWert * 0;
			}
			
			if(temp >= 4 && temp <= 6)
			{
				y = yWert * 1 + 5;
			}
			if(temp >= 7 && temp <= 9)
			{
				y = yWert * 2 + 10;
			}
			
			y += 20;
			
			
			g.drawImage(postitRohling, x, y, xWert, yWert, this);
			
			JTextArea ta1 = new JTextArea("ID: " + p.getId());
			ta1.setLineWrap(false);
			ta1.setBackground(Color.yellow);
			ta1.setSize(30, 20);
			ta1.setLocation(x+5,y+1);
			this.add(ta1);
			
			JTextArea ta2 = new JTextArea(p.getText());
			ta2.setLineWrap(true);
			ta2.setBackground(Color.yellow);
			ta2.setSize((xWert - 20), (yWert - 35));
			ta2.setLocation((x + 10), (y + 23));
			this.add(ta2);
		}
	}

	@Override
	protected void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		g.drawImage(background, 0, 0, this);
		paintPostIts(g);
	}

	@Override
	public void update(Observable arg0, Object arg1)
	{
		repaint();
	}

}
 
S

SlaterB

Gast
ob nun direkt in paintComponent() oder in einer Untermethode, das macht gewiss keinen Unterschied,
während des Zeichenvorgangs Objekte einzufügen ist nicht gut, soviel kann man sagen,

aber mit dem postit-Bild sollte das eher wenig zu tun haben,
da vermute ich klassische Ursachen: Bild gar nicht geladen, Schleife leer, x,y-Variablen falsch berechnet und ähnliches,

fange doch mal mit ner einfachen paintComponent-Methode an:

protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(background, 0, 0, this);
g.drawImage(postitRohling, 20, 20, this);
}

funktioniert das?
wenn nicht, dann ist zumindest 50% der Codes irrelevant ;)

wenn doch, dann nach und nach dann die Skalierung der Länge/ Breite einbauen, Schleife mit mehreren Bildern,
x,y-Berechnung, am Ende wieder die TextAreas usw.
 

0din

Bekanntes Mitglied
Gezeichnet wird das ganze mit dem kurzen stück auch nicht.
Das image wird geladen (ansonsten müsste ich nen stacktrace haben)

was mir aber beim anschaun der variablen im debug auffällt ist, das background hat height und width 500
das postit -1 und -1... obwohl das image 300nochwas bei 300nochwas is

Das postit bild hat meine freundin gemacht und am rand sind einige stellen transparent.
Kanns sein das Java sowas garnich lustig findet?
 
S

SlaterB

Gast
ich persönlich kann über den Zustand des Bildes auf der Ferne nichts sagen,
wenn du es postest (Dateianhänge an Post), dann kann ich es testen
 

0din

Bekanntes Mitglied
validate() zieht auch nich... so langsam wird das ganze doch seltsam...

Wie gesagt, das einzige was für mich sinn machen würde wäre das image un die eigenschaft des transparenten teils

SlaterB
Das image is angehängt
 

André Uhres

Top Contributor
Der kurze Code von SlaterB funktioniert bei mir. Nur die Transparenz in deinem Bild klappt nicht. Mit anderen transparenten Bildern gibt es bei mir jedoch kein Problem. Das sind allerdings alles "gif" Bilder. Vielleicht geht das nicht mit "jpg"?
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
JPEG unterstützt keine Transparenz. Entweder PNG, oder GIF, oder SVG (zum Beispiel mit Apache Batik).

Dieses Bild würde ich wohl versuchen in ein PNG umzuwandeln und weiß zu transparent zu wandeln.

Ebenius
 

0din

Bekanntes Mitglied
Bei mir mag der Code leider nicht arbeiten.
Ich hab das bild nu als PNG versucht, dabei sollte laut euch ja die transparenz funktioniern.
Das bild wird noch immer net gezeichnet.

Das problem scheint noch immer das selbe zu sein, die höhe und breite steht noch immer bei -1 und -1
Folglich wirds ja vllt gezeichnet aber halt mit den komischen abmessungen, was zur folge hat dasses gezeichnet wird aber nich sichtbar is.

Also vllt mal die frage, wie kann es passieren das ein bild die abmessungen -1 * -1 bekommt oder wie kann ich das ändern?
 

L-ectron-X

Gesperrter Benutzer
Das Problem kommt mir bekannt vor. Als ich meine ersten Applets geschrieben habe, war das Problem auf der Tagesordnung. Nur weiß ich nicht, ob sich das hier her übertragen lässt.
Das Bild wird zwar gefunden, aber das Laden dauert zu lange, so dass ein leeres Image gezeichnet wird. Das Bild hat deshalb negative Abmessungen, weil es zum Zeitpunkt des Zeichnens noch nicht verfügbar ist.
Das lässt sich ändern. Wenn du weiter das Toolkit zum Laden der Bilder verwenden möchtest, solltest du mal versuchen, die Bilder mit dem java.awt.MediaTracker zu laden.
Das macht aber eigentlich nur in AWT-Programmen Sinn.
In Swing-Programmen verwendet man das wesentlich effizientere ImageIO zum Einlesen von Grafikdateien.
 

0din

Bekanntes Mitglied
Treffer,
Versenkt!
:D

Wenn zum einlesen folgende zeile genommen wird, funktioniert das ganze wieder.
Java:
import java.io.File;
import java.awt.Image;
import javax.imageio.ImageIO;

Image postitRohling = ImageIO.read(new File(pfad + "/images/postit_groß.png"));
Das ganze wird nun anstandslos gezeichnet.

Und was lernen wir daraus?
Toolkit zum Image einlesen = Schrott

Mühsam nährt sich das Eichhörnchen...
Herzlichen Dank euch allen
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
Und was lernen wir daraus?
Toolkit zum Image einlesen = Schrott
Beim Nichtschwimmer liegt's auch immer an der Badehose. ;-)

Ein Image wird nunmal per Toolkit so geladen, dass es nicht vollständig initialisiert ist, wenn man es zurück bekommt. Ist nunmal das Konzept des ImageObservers. MediaTracker ist eine Möglichkeit, sicher zu stellen, dass ein Bild dann vollständig geladen ist, wenn man es wirklich benötigt.

Ich schreib das eigentlich nur, weil ich darauf hinweisen wollte, dass Du Dir mangels Ahnung eine schlechte Meinung zugelegt hast. ;-)

Ebenius
 

0din

Bekanntes Mitglied
Ebenius:
Nuja, das is aber recht praktisch so. Nu weiß ich das ich das toolkit für sowas besser net ran nehme sondern gleich auf ImageIO übergehe.
Un du musst zugeben, hätte ich das gleich gemacht wäre dieser Thread nicht hier ;-)
Wenn ich mir nu angewöhn das ImageIO zu nehmen, spart mir das auf dauer zeit & nerven

André Uhres:
Bequem naja, ich hab 5min mehr gebraucht um zu verstehn was drin steckt aber wenn mans weiß isset um einiges geschickter, vorallem wenn ich lese was Ebenius zum toolkit geschrieben hat.


Nichts desto trotz, es bleibt bei nem Danke ;-)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Zwei JPanel übereianderlegen AWT, Swing, JavaFX & SWT 14
XWing Basic JPanel mit 2 Buttons beutzen. AWT, Swing, JavaFX & SWT 10
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
N AWT JPanel zu Jframe hinzufügen AWT, Swing, JavaFX & SWT 2
M clear JPanel before repainting AWT, Swing, JavaFX & SWT 1
B ImageIcon auf JPanel austauschen AWT, Swing, JavaFX & SWT 3
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
P Swing Mehrere JLabels mit ImageIcon in JPanel lesen AWT, Swing, JavaFX & SWT 1
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
F JPanel Celleditor AWT, Swing, JavaFX & SWT 8
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
P Button simpler random auf einem JPanel verteilen? AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
Ich lerne Java. Swing Von JPanel A auf JPanel B zugreifen. AWT, Swing, JavaFX & SWT 4
A JPanel austauschen und Focus geben AWT, Swing, JavaFX & SWT 3
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
L JComponent aus JPanel anhand Mausposition ermitteln AWT, Swing, JavaFX & SWT 10
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
B Verschiebbares JPanel "ruckelt" im Randbereich AWT, Swing, JavaFX & SWT 2
S Swing JPanel nimmt keinen KeyListener an AWT, Swing, JavaFX & SWT 7
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
Hatsi09 Swing JPanel Bild einfügen AWT, Swing, JavaFX & SWT 14
L JPanel zeigt keinen Inhalt AWT, Swing, JavaFX & SWT 1
dereki2000 JPanel mit Rückgbe wie bei JOptionPane AWT, Swing, JavaFX & SWT 3
E Hintergrundfarbe setzen in JPanel funktioneirt nicht AWT, Swing, JavaFX & SWT 4
P JPanel KeyListener hinzufügen AWT, Swing, JavaFX & SWT 8
S Nach scrollen verschwindet das zuvor im JPanel gezeichnete AWT, Swing, JavaFX & SWT 2
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
L Swing JPanel Größe anpassen AWT, Swing, JavaFX & SWT 6
D Platzierung von JTextfield in JPanel AWT, Swing, JavaFX & SWT 3
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Zwei JPanel übereinander nur vorderes "repainten" AWT, Swing, JavaFX & SWT 3
J 2D-Grafik Background einer Jpanel Klasse ändern AWT, Swing, JavaFX & SWT 1
J Ziehen eines Buttons im JPanel AWT, Swing, JavaFX & SWT 2
J Button lässt sich nicht auf dem JPanel verschieben AWT, Swing, JavaFX & SWT 5
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
it_is_all JPanel verschwindet nach Button-Klick AWT, Swing, JavaFX & SWT 2
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
F Screenshot eines JPanel AWT, Swing, JavaFX & SWT 3
S JPanel rotieren, Bild ist abgeschnitten, Clipping? AWT, Swing, JavaFX & SWT 0
M Swing JPanel flüssig verschieben AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
kilopack15 JPanel im laufenden Zustand einfärben AWT, Swing, JavaFX & SWT 2
kilopack15 JPanel Farbverwaltung AWT, Swing, JavaFX & SWT 1
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
A Swing JLabels in einer ForEach Schleife an den JPanel anheften (UNO Netzwerkspiel) AWT, Swing, JavaFX & SWT 1
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
F Zeichnung einem JPanel im Layoutmanager zuweisen AWT, Swing, JavaFX & SWT 3
Meeresgott Swing Umgang mit JPanel AWT, Swing, JavaFX & SWT 4
R 2D-Grafik PNG Bild per Graphics auf JPanel AWT, Swing, JavaFX & SWT 9
K JPanel Bilder bei Windows nicht darstellbar AWT, Swing, JavaFX & SWT 6
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
J Swing Zeichenfläche im JPanel des Haupfenster anzeigen lassen AWT, Swing, JavaFX & SWT 4
A Swing JPanel zeigt Buttons nicht an AWT, Swing, JavaFX & SWT 4
R JPanel überzeichnet alles? AWT, Swing, JavaFX & SWT 1
D Von JPanel auf anderes JPanel zugreifen AWT, Swing, JavaFX & SWT 9
L Swing Teile eines JPanel in eigene Klasse auslagern AWT, Swing, JavaFX & SWT 3
I JPanel - Verwaltung/ Anordnung AWT, Swing, JavaFX & SWT 4
T JComponents zur Laufzeit auf JPanel darstellen AWT, Swing, JavaFX & SWT 10
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
M Swing JPanel innerhalb eines Frames verschieben AWT, Swing, JavaFX & SWT 3
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
K Swing JPanel ueber komplette Form legen AWT, Swing, JavaFX & SWT 1
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
O JTabeddpane aber jedes JPanel als eigene Klasse anlegen AWT, Swing, JavaFX & SWT 7
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
I (JPanel) paintComponent mit Zeitverschiebung (Sleep/Wait) AWT, Swing, JavaFX & SWT 1
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
S jpanel anchor bottom AWT, Swing, JavaFX & SWT 1
thobren Swing Im JPanel wird nur TextArea gelöscht AWT, Swing, JavaFX & SWT 13
A JPanel größe verändern AWT, Swing, JavaFX & SWT 4
G JPanel komponente Löschen AWT, Swing, JavaFX & SWT 7
F JPanel "verschmelzen" GridLayout AWT, Swing, JavaFX & SWT 10
B Dropdown "Einstellungen" auf JPanel, transparent AWT, Swing, JavaFX & SWT 1
D GlassPane für JPanel AWT, Swing, JavaFX & SWT 2
F JPanel "zeichnet" keinen Text AWT, Swing, JavaFX & SWT 14
T Swing Index für Komponente in JPanel? AWT, Swing, JavaFX & SWT 6
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
O 2D-Grafik Zeichenfläche auf JPanel AWT, Swing, JavaFX & SWT 4
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
A JPanel Bild laden (Porblem mit Dateipfad) AWT, Swing, JavaFX & SWT 2
K Swing paintComponent, JPanel auslagern, ChangeEvents AWT, Swing, JavaFX & SWT 7
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
dat_vin Zeichenbrett (JPanel) AWT, Swing, JavaFX & SWT 10
K Swing JPanel nach oben und links vergrößern AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben