Java drawImage zeichnet nicht korrekt

Borg2of7

Cadet 2nd Year
Dabei seit
Sep. 2006
Beiträge
17
Hi!

Ich habe da ein kleines Problem mit dem Zeichnen von Images auf ein JPanel.
Das Bild ist eine PNG Datei mit transparentem Hintergrund. Wie man unten sehen kann, wird hinter den grünen Pfeil ein Stück eines Textfeldes gezeichnet (dieses steht korrekt gezeichnet auf dem Panel nebendran).
Woran kann das liegen?
Ich zeichne noch einige Grafiken auf anderen Panels im Frame. Diese werden ohne Probleme gezeichnet.

Hier das Panel auf dem der Pfeil gezeichnet wird:
Code:
public class ArrowPanel extends JPanel {

	private ImageSymbol is; //ImageSymbol ist für das Laden und Resizen der Grafik zuständig

	public ArrowPanel() {
		String filename = "images/arrow_left.png";
		Dimension d = new Dimension(30, 30);
		this.setPreferredSize(d);

		is = new ImageSymbol(0, 0, 30, 30, filename);
		

	}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponents(g);
		this.prepareImage(is.getImage(), this);
		g.drawImage(is.getImage(), is.getX(), is.getY(), this);
		
		
		
	}
Hier das Panel, auf den das Pfeilpanel kommt und welche dann auf den Frame gesetzt wird:
Code:
public class LinkPanel extends JPanel {

	private JLabel label = new JLabel("Link zum Zyklus: ");
	private JTextField linkField;
	private JButton button = new JButton("in Zwischenablage");

	public LinkPanel(int userID, int cycleID) {
		String text = "http://www.mein-zykluskalender.de/index.php?page=show&userID="
				+ userID + "&cycleID=" + cycleID;
		linkField = new JTextField(45);
		linkField.setText(text);
		ArrowPanel left = new ArrowPanel(0);
		ArrowPanel right = new ArrowPanel(1);

		this.setLayout(new FlowLayout());

		this.add(left);
		this.add(label);
		this.add(textField);
		this.add(button);
		this.add(right);

		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				Clipboard clipboard = textField.getToolkit()
						.getSystemClipboard();
				StringSelection data = new StringSelection(linkField.getText());
				clipboard.setContents(data, data);

			}
		});

	}

}
Danke schonmal!

LG
 

Anhänge

Killkrog

Lt. Junior Grade
Dabei seit
Jan. 2006
Beiträge
323
Probier mal, anstatt eines ImageSymbol ein BufferedImage zu benutzen.

super.paintComponents(g);
this.prepareImage(is.getImage(), this);
g.drawImage(is.getImage(), is.getX(), is.getY(), this);

kann dann abgewandelt werden in:

g.drawImage(is, 0, 0, this);
 

Borg2of7

Cadet 2nd Year
Ersteller dieses Themas
Dabei seit
Sep. 2006
Beiträge
17
Hab das ganze jetzt mit den BufferedImage gemacht, aber es passiert immer noch das gleiche.
Was mir jetzt aber noch aufgefallen ist, dass sobald ich die Größe des Frames änder wird das Bild nach dem repaint korrekt angezeigt. Lass ich das Fenster aber von hand neu zeichen, dann ändert sich nichts o.O
 

Darlis

Commodore
Dabei seit
Jan. 2011
Beiträge
4.228
Ruf' mal die Methode revalidate() auf dein LinkPanel auf, nachdem du es erstellt und zu einem Container hinzugefügt hast.
 
Top