P
Paristick
Gast
Hallo!
Ich habe eine Frage zu einem Problem, dass mich schon zu lange nervt, obwohl nix Großartiges dahinter sein kann. Und zwar gehts dabei um das Ziehen einer geraden Linie. Mein Problem besteht darin, dass ich immer einen Fächereffekt beim Zeichnen bekomme und erst beim resizen des Fensters wird wirklich nur die letze Linie dargestellt. Ich habe das Ganze mit 2 Listen gelöst - aber seht am Besten selbst:
//Die ganzen Imports lass ich mal weg...
<code>
public class ePanel extends JPanel implements MouseListener,
MouseMotionListener {
private static final long serialVersionUID = 1L;
int x1;
int x2;
int y1;
int y2;
boolean dragged = false;
boolean released = true;
// @jve:decl-index=0:
public List<Shape> drawlist = new ArrayList<Shape>(); // @jve:decl-index=0:
public List<Shape> dragglist = new ArrayList<Shape>(); // @jve:decl-index=0:
// @jve:decl-index=0:
/**
* This is the default constructor
*/
public ePanel() {
super();
initialize();
}
public void paint (Graphics g) {
g.setColor(Color.black);
for (int i = 0; i <= this.getWidth(); i = i + 20) {
g.drawLine(i, 0, i, this.getHeight());
}
for (int i = 0; i <= this.getHeight(); i = i + 20) {
g.drawLine(0, i, this.getWidth(), i);
}
if (released == true) {
if (Main.shapeUebergabe == "line") {
if (Main.colorUebergabe == "blue") {
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
drawlist.add(stroke);
} else if (Main.colorUebergabe == "red") {
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.RED);
drawlist.add(stroke);
}
} else if (Main.shapeUebergabe == "ellipse") {
if (Main.colorUebergabe == "blue") {
Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.BLUE);
drawlist.add(ellipse);
} else if (Main.colorUebergabe == "red") {
Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.RED);
drawlist.add(ellipse);
}
}
}
if (dragged == true) {
if (Main.shapeUebergabe == "line") {
if (Main.colorUebergabe == "blue") {
dragglist.clear();
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
dragglist.add(stroke);
}
}
}
for (Shape s : dragglist) {
s.paint(g);
}
for (Shape s : drawlist) {
s.paint(g);
}
}
private void initialize() {
this.setSize(300, 200);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
// @jve:decl-index=0:
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent press) {
x1 = press.getX();
y1 = press.getY();
}
// @jve:decl-index=0:
@Override
public void mouseReleased(MouseEvent release) {
released = true;
dragged = false;
x2 = release.getX();
y2 = release.getY();
repaint();
}
@Override
public void mouseDragged(MouseEvent drag) {
dragged = true;
released = false;
x2 = drag.getX();
y2 = drag.getY();
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
}
</code>
Ich habe eine Frage zu einem Problem, dass mich schon zu lange nervt, obwohl nix Großartiges dahinter sein kann. Und zwar gehts dabei um das Ziehen einer geraden Linie. Mein Problem besteht darin, dass ich immer einen Fächereffekt beim Zeichnen bekomme und erst beim resizen des Fensters wird wirklich nur die letze Linie dargestellt. Ich habe das Ganze mit 2 Listen gelöst - aber seht am Besten selbst:
//Die ganzen Imports lass ich mal weg...
<code>
public class ePanel extends JPanel implements MouseListener,
MouseMotionListener {
private static final long serialVersionUID = 1L;
int x1;
int x2;
int y1;
int y2;
boolean dragged = false;
boolean released = true;
// @jve:decl-index=0:
public List<Shape> drawlist = new ArrayList<Shape>(); // @jve:decl-index=0:
public List<Shape> dragglist = new ArrayList<Shape>(); // @jve:decl-index=0:
// @jve:decl-index=0:
/**
* This is the default constructor
*/
public ePanel() {
super();
initialize();
}
public void paint (Graphics g) {
g.setColor(Color.black);
for (int i = 0; i <= this.getWidth(); i = i + 20) {
g.drawLine(i, 0, i, this.getHeight());
}
for (int i = 0; i <= this.getHeight(); i = i + 20) {
g.drawLine(0, i, this.getWidth(), i);
}
if (released == true) {
if (Main.shapeUebergabe == "line") {
if (Main.colorUebergabe == "blue") {
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
drawlist.add(stroke);
} else if (Main.colorUebergabe == "red") {
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.RED);
drawlist.add(stroke);
}
} else if (Main.shapeUebergabe == "ellipse") {
if (Main.colorUebergabe == "blue") {
Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.BLUE);
drawlist.add(ellipse);
} else if (Main.colorUebergabe == "red") {
Ellipse ellipse = new Ellipse(x1, y1, x2, y2, Color.RED);
drawlist.add(ellipse);
}
}
}
if (dragged == true) {
if (Main.shapeUebergabe == "line") {
if (Main.colorUebergabe == "blue") {
dragglist.clear();
Stroke stroke = new Stroke(x1, y1, x2, y2, Color.BLUE);
dragglist.add(stroke);
}
}
}
for (Shape s : dragglist) {
s.paint(g);
}
for (Shape s : drawlist) {
s.paint(g);
}
}
private void initialize() {
this.setSize(300, 200);
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
// @jve:decl-index=0:
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent press) {
x1 = press.getX();
y1 = press.getY();
}
// @jve:decl-index=0:
@Override
public void mouseReleased(MouseEvent release) {
released = true;
dragged = false;
x2 = release.getX();
y2 = release.getY();
repaint();
}
@Override
public void mouseDragged(MouseEvent drag) {
dragged = true;
released = false;
x2 = drag.getX();
y2 = drag.getY();
repaint();
}
@Override
public void mouseMoved(MouseEvent arg0) {
}
}
</code>