Hallo 
ich habe folgendes Problem.. Ich will mit 2 verschiedene Buttons 2 Verschiedene Rechtecke(ein in grau und ein orange) zeichnen. Jedes mal bei Drücken des Button sollen immer wieder weitere erstellt werden (zb 5 mal drücken des Button werden 5 orange rechtecke erstellt).. die kann man dann bewegen und skalieren... es klappt alles soweit, aber.. wenn ich ein grauen erstellt hab zb und dann ein orangenen erstellt will wird er auf dieselbe position erstellt wo sich grade ein grauen befinden(ich hab den zb vorher iwohin bewegt)... ich denke es werde alle rechtecke die ich will erstellt aber immer an der aktuelle position wo der vorige recjteck sich grade befindet... soll natürlich nicht so sein...
ich habe folgendes Problem.. Ich will mit 2 verschiedene Buttons 2 Verschiedene Rechtecke(ein in grau und ein orange) zeichnen. Jedes mal bei Drücken des Button sollen immer wieder weitere erstellt werden (zb 5 mal drücken des Button werden 5 orange rechtecke erstellt).. die kann man dann bewegen und skalieren... es klappt alles soweit, aber.. wenn ich ein grauen erstellt hab zb und dann ein orangenen erstellt will wird er auf dieselbe position erstellt wo sich grade ein grauen befinden(ich hab den zb vorher iwohin bewegt)... ich denke es werde alle rechtecke die ich will erstellt aber immer an der aktuelle position wo der vorige recjteck sich grade befindet... soll natürlich nicht so sein...
Java:
public class EditPanel extends JPanel
{
static boolean drawRect = false;
static boolean drawOrangeRect = false;
List<Rectangle2D.Float> rectangles = new ArrayList<>();
Rectangle2D.Float rec = new Rectangle2D.Float(0,0,100,100);
//Colors
Color grayRect = new Color(230,227,224);
Color orangeRect = new Color(211,111,53);
MovingAdapter ma = new MovingAdapter();
/*
* Konstruktor
*/
public EditPanel()
{
addMouseMotionListener(ma);
addMouseListener(ma);
addMouseWheelListener(new ScaleHandler());
}
/*
* Zeichenmethode verschiedener Rechtecken
*/
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
//wenn drawRect auf true gesetzt ist (was man mit dem Button IndividualForms tut) wird einen grauen Rect gezeichnet
if(drawRect)
{
borderrect(g);
}
//wenn drawOrangeRect auf true gesetzt ist (was man mit dem Button OrangeForms tut) wird einen orangenen Rect gezeichnet
if(drawOrangeRect)
{
filledrect(g);
}
}
/*
* Erstellt ein Rechteckt mit grauem Rahmen
*/
public void borderrect (Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(Color.LIGHT_GRAY);
g2d.setStroke(new BasicStroke(2.0f));
rectangles.add(rec);
for (Rectangle2D r : rectangles)
{
g2d.draw(r);
}
}
/*
* Erstellt ein orangenes Rechteckt
*/
public void filledrect (Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
g2d.setPaint(orangeRect);
rectangles.add(rec);
for (Rectangle2D r : rectangles)
{
g2d.fill(r);
}
}
/*
* Hier werden die Aktionen definiert, wie sich der erstellte Rechteck beim
* Mausdraggen und Mausclicken verhält
*/
class MovingAdapter extends MouseAdapter
{
private int x;
private int y;
public void mousePressed(MouseEvent e)
{
x = e.getX();
y = e.getY();
}
public void mouseDragged(MouseEvent e)
{
int dx = e.getX()-x;
int dy = e.getY()-y;
if (rec.getBounds2D().contains(x, y))
{
rec.x = rec.x + dx;
rec.y = rec.y + dy;
repaint();
}
x = x + dx;
y = y + dy;
}
}
/*
* Hier werden die Aktionen definiert, wie sich der erstellte Rechteck beim
* Scrollen mit der mittlere Taste verhält
*/
class ScaleHandler implements MouseWheelListener
{
public void mouseWheelMoved(MouseWheelEvent e)
{
int x = e.getX();
int y = e.getY();
if (e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL)
{
if (rec.getBounds2D().contains(x, y))
{
float amount = e.getWheelRotation() * 5f;
rec.width = rec.width + amount;
rec.height = rec.height + amount;
repaint();
}
}
}
}
}