Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können

Alex2013

Bekanntes Mitglied
Hallo Leute,

mein Programm ist jetzt fast komplett lauffähig.
Das ContentPane auf dem gezeichnet wird lädt und man kann auch zeichnen.
Einziger Makel, wenn man auf den Button Clear drückt, wird in der Position Top ein weiterer Button "Clear" angezeigt. Weiß evtl. jemand wie man dieses Problem umgehen kann?

Aber zum Hauptproblem:
Wenn ich auf den Button Exit klicke, schließt er das Fenster, wie es gewollt ist.
Wenn ich auf den Button Clear klicke, zeichnet er es zwar weiß, um die Zeichnung zu überdecken, wenn ich aber erneut zeichne und anschließend wieder auf den Button klicke, passiert nichts. Soll heißen, das Gezeichnete wird nicht überdeckt. Wie kann ich das korrigieren?
Ansonsten funktioniert das Programm wie es soll.

Hier der Code:

Java:
[code]
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Paint extends JPanel implements MouseListener, MouseMotionListener
{	
	private static final long serialVersionUID = 1L;
	
	private int startX,startY,tempX,tempY;
	static JButton b1,b2;
	private Graphics2D g2;
	public final static Color WHITE = new Color(255, 255, 255);
	
	public Paint()
	{
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
	}
	
	public static void main (String args[]) throws Exception
	{
		JFrame f=new JFrame("Paint Programm");
		f.setLayout(new BorderLayout());
		ButtonListener1 bl1= new ButtonListener1(f);
		
		Paint paint1=new Paint();
		paint1.setLayout(new BorderLayout());
		
		b1=new JButton("Exit");
		b2=new JButton("Clear");
		
		b1.setActionCommand("Exit");
		b2.setActionCommand("Clear");
		
		b1.addActionListener(bl1);
		b2.addActionListener(bl1);
		
		f.getContentPane().add(b1,BorderLayout.NORTH);
		f.getContentPane().add(b2,BorderLayout.SOUTH);
		
		f.getContentPane().add(new Paint());
		
		f.setSize(500,400);
		f.setLocation(200,100);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setVisible(true);
	}

	public void paintComponent(Graphics g)
	{
		g2=(Graphics2D) g;
		g2.setPaintMode();
		g2.drawLine(startX, startY, tempX, tempY);
		startX=tempX;
		startY=tempY;
		//tempX wird hier der variablen startX zugewiesen, da der endpunkt der einen linie ja wieder als anfangspunkt fuer die neue Linie gilt
		//ebenso wie tempY startY zugewiesen wird, denn die Endposition der einen Linie ist wieder der anfangspunkt der neuen linie
		//man uebergibt der drawLine methode die vier geforderten werte
		//zum einen den anfangsstart und endpunkt der x achse und zum anderen den anfangsstart und endpunkt der y achse
	}
	
	@Override
	public void mouseDragged(MouseEvent me) 
	{
		tempX=me.getX();
		tempY=me.getY();
		repaint();
		//die variablen temp gelten hierbei nur als Platzhalter fuer den end und anfangspunkt
		//denn wenn die Maus bewegt wird, bekommt die variable tempX den endwert der Mausbewegung in X richtung zugewiesen
		// und die tempY variable bekommt den endwert der Mausbewegung in Y Richtung zugewiesen. 
		//Diese Werte gelten aber auch wieder als Anfangspunkt, nachdem die repaint Methode ausgefuehrt wurde
	}

	@Override
	public void mousePressed(MouseEvent me) 
	{
		startX=me.getX();
		startY=me.getY();
		//Hier wird als erstes der gedrueckten Maustaste die x und die y position zugewiesen
		//und diese in der jeweiligen Variable gespeichert startX und startY
		//die variable startX bekommt die Startposition X der gedrueckten Maustaste zugewiesen
		//die variable startY bekommt die Startposition Y der gedrueckten Maustaste zugewiesen
	}
	
	@Override
	public void mouseMoved(MouseEvent arg0) 
	{
		
	}

	@Override
	public void mouseClicked(MouseEvent arg0) 
	{
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) 
	{
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) 
	{
		
	}

	@Override
	public void mouseReleased(MouseEvent arg0) 
	{
		
	}
}
	class ButtonListener1 implements ActionListener
	{
		JFrame f;
		public ButtonListener1(JFrame f) 
		{
			super();
			this.f=f;
		}

		@Override
		public void actionPerformed(ActionEvent ae) 
		{
			if(ae.getActionCommand().equals("Exit"))
			{
				f.dispose();
			}
			else if(ae.getActionCommand().equals("Clear"))
			{       //Das hier ist der Bereich, der noch nicht funktioniert, wie er sollte
				f.getContentPane().setBackground(Color.white);
			}
		}
	}
[/code]

Vielen Dank schon mal für hilfreiche Antworten! :)

Lg
 

eRaaaa

Top Contributor
Naja du änderst ja einfach nur den Hintergrund von "grau?" zu weiß, das machst du ja schon beim ersten Klick. Dass dein gemaltes verschwindet ist nur ein Nebeneffekt weil setBackground repaint(9 aufruft. Was du machen könntest ist das setBackground schon da zu setzen wo du das Panel addest (z.B. danach:
f.getContentPane().add(new Paint());
f.getContentPane().setBackground(Color.WHITE);
) wenn du wirklich auf weißem Hintergrund zeichnen möchtest (wenn nicht kannst du es auch weglassen)

und dann in deinem Listener einfach f.getContentPane().repaint() aufrufen.
 
Zuletzt bearbeitet:

Alex2013

Bekanntes Mitglied
Ich danke dir vielmals! :)

Hättest du evtl. einen Tipp warum sobald ich auf den Frame klicke um zu zeichnen ein dritter Button oben erscheint?
Es erscheint ein zweiter "Clear" Button unter dem "Exit" Button. Wenn ich auf clear drücke verschwindet dieser auch wieder, aber sobald ich den Frame wieder anklicke um zu zeichnen wird er dort wieder gebildet...
Ich kann mir das nicht erklären... :-(

Habe ich evtl. an einer Stelle im Code einen Button hinzugefügt und ich sehe es nicht oder so etwas in der Art?

Lg alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Button anzeigen bei überschrieber paint() AWT, Swing, JavaFX & SWT 12
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
K 2D-Grafik Paint - Wie binde ich repaint ein? AWT, Swing, JavaFX & SWT 8
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
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
C paint-Methode überschreiben AWT, Swing, JavaFX & SWT 19
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
G Frage zur paint-Methode (AWT) AWT, Swing, JavaFX & SWT 9
N paint Methode im JFrame AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben