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:
[/code]
Vielen Dank schon mal für hilfreiche Antworten!
Lg
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);
}
}
}
Vielen Dank schon mal für hilfreiche Antworten!
Lg