Java-Grafik-repaint problem
Probleme mit einem einfachen paint pad in java. Probleme mit immer meine clear-Taste neu zu streichen. Das array wird löschen aber nicht aktualisiert. Kann jeder spot mein problem oder gibt es eine andere Art der Erzeugung einer clear-Taste für diesen code.
public class DrawingPanel extends JPanel {
private double x1=0;
private double x2=0;
private double y1=0;
private double y2=0;
private ArrayList<Shape> myArr = new ArrayList<Shape>();
//private ArrayList<Shape> clearMyArr = new ArrayList<Shape>();
ButtonPanel buttonPress;
public void paintComponent(Graphics g)
{
for (Shape i : myArr)
{
Graphics2D g2d = (Graphics2D)g;
g2d.draw(i);
}
/*for (Shape i : clearMyArr)
{
Graphics2D g2d = (Graphics2D)g;
g2d.draw(i);
} */
}
//inner class
class Listener1 extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
x1=e.getX();
y1=e.getY();
System.out.println("Mouse Pressed");
}
public void mouseReleased(MouseEvent e)
{
x2=e.getX();
y2=e.getY();
Shape shape = null;
if (buttonPress.buttonType.equals("Rectangle"))
{
//Rectangles cannot have a zero width or height
if (x1 != x2 || y1 != y2)
{
double width = Math.abs(x1 -x2);
double height = Math.abs(y1-y2);
shape = new Rectangle2D.Double(Math.min(x1,x2),Math.min(y1,y2), width, height);
}
}
if (buttonPress.buttonType.equals("Eclipse"))
{
double width = Math.abs(x1 -x2);
double height = Math.abs(y1-y2);
shape = new Ellipse2D.Double(Math.min(x1,x2),Math.min(y1,y2), width, height);;
}
if (buttonPress.buttonType.equals("Lines"))
{
shape = new Line2D.Double(x1, y1, x2, y2);
}
if (buttonPress.buttonType.equals("Clear"))
{
for( int i = 0;i <= myArr.size(); i++ )
{
System.out.println("ArrayList Size :"+myArr.size());
myArr.clear(); //clear all elements from arraylist
//clearMyArr.addAll(myArr);
System.out.println("ArrayList Size :"+myArr.size());
//myArr.removeAll();
revalidate();
repaint();
}
}
if (shape != null)
{
myArr.add(shape);
}
repaint();
}
}
//end of inner class
public DrawingPanel(ButtonPanel reference)
{
buttonPress = reference;
setBorder(BorderFactory.createLineBorder(Color.black,4));
addMouseListener(new Listener1());
}
}
Ich verstehe nicht das problem. Sind die alten Formen noch sichtbar nach der Reinigung? Oder ist die Schaltfläche löschen nicht gezeichnet wird?
Für bessere Hilfe früher, nach einem SSCCE (pscode.org/sscce.html).
Für bessere Hilfe früher, nach einem SSCCE (pscode.org/sscce.html).
InformationsquelleAutor mix2000 | 2011-03-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie vergessen haben, rufen Sie
super.paintComponent(g);
hintergrund nicht geräumt, so dass das alte Bild noch sichtbar sein werden. Und alle JButton ' s, und Sachen, die Sie Hinzugefügt haben, nicht gezeichnet werden. Um dies zu beheben, lassen Sie das panel zeichnen Sie sich zuerst, dann Sie können ziehen Sie Ihre Sachen oben drauf.Diese funktioniert auch (außer, dass es nicht ziehen Sie widgets Hinzugefügt, mit
DrawingPanel.add(..)
). Es ist ein dirty hack:In der listener-das wäre genug.
Sie sollten nicht haben zu rufen
revalidate();
.InformationsquelleAutor Ishtar
Versuchen, zu nennen super.paintcomponent(g) von der paintcomponent-Methode. Und auch stellen Sie sicher, Sie sind dem Aufruf der revalidate und repaint-Methode von JPanel.
InformationsquelleAutor Samra
Versuchen, rufen repaint(); Ihrer JPanel.
InformationsquelleAutor Erkan Haspulat