Auf einem Hintergrundbild zeichnen

malibu99

Neues Mitglied
Hallo,

ich habe folgendes Problem. Ich möchte auf einem Bild zeichnen. Das Bild und die Zeichenebene liegen beide auf unterschiedlichen JPanels. Diese hab ich per Cardlayout übereinander gelegt.
Auf der Zeichenebene soll man per MouseDragg eine Linie um einen festen Punkt zeichnen können. Leider ist die Zeichenebene nicht transparent, so das man das Hintergrundbild nicht mehr sieht.

Background.java
Java:
import java.awt.CardLayout;
import java.io.IOException;
import javax.swing.*;

@SuppressWarnings("serial")
public class Background extends JFrame   {
	
	JPanel myPanel = new JPanel();
	JPanel draw = new Zeichne();
	JLabel bild = new JLabel(new ImageIcon("karte.jpg"));
	
	public Background() throws IOException   {
		myPanel.setLayout(new CardLayout());
		myPanel.add(draw, "Hintergrund");
		myPanel.add(bild, "Zeichenebene");
		
	
	
		draw.setVisible(true);
		draw.setOpaque(false);
		
		
        add(myPanel);
		setSize(450,450);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
	}
   
     public static void main(String[] args) throws IOException {   	 
         new Background();          
     }
}

und
zeichne.java
Java:
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

class Zeichne extends JPanel implements MouseMotionListener {
	int x=0;
	int y=0;
	
	Zeichne() {
		addMouseMotionListener(this);
	}
	
   public void paintComponent(Graphics g) {
	   super.paintComponent(g);
       g.drawLine(200,200,x,y);
   }

@Override
public void mouseDragged(MouseEvent e) {
	x = e.getX();
	y = e.getY();
	repaint();
}

@Override
public void mouseMoved(MouseEvent arg0) {}
}

ich hoffe ihr könnt mir weiterhelfen.
Danke schonmal!
malibu99
 
CardLayout zeigt extra genau entweder das eine oder das andere an,
das ist nun eine Variante die recht todsicher NICHT zum Funktionieren zu bringen ist 😉

suche im Internet nach Hintergrundbild Java, da gibt es sicher einige Alternativen,
ich empfehle den überschaubaren Aufbau, in einem paintComponent() das Image zu malen sowie deine Zeichenbefehle hinterher

--------

deine Benennung ist auch bisschen komisch, das Zeichenpanel als 'Hintergrund' zu bezeichnen,
nun ja, passt immerhin zu deinem Titel 'auf Hintergrund malen',
aber das JLabel mit dem Image ist doch nun ganz gewiss nicht die 'Zeichenebene',
andersrum passt es sicher besser, abgesehen davon dass du CardLayout ganz entfernen solltest 😉
 
Zuletzt bearbeitet von einem Moderator:
ok klappt danke! habe es so gemacht wie du beschrieben hast. ja die beschriftung habe ich nur mal eben schnell gemacht, hab ich wohl verwechselt. egal.. funktioniert ja jetzt 🙂
 

Neue Themen


Zurück
Oben