Hallo,
in meinem derzeitigen Projekt, kann ich mehrere Rechtecke zeichnen lassen, was wunderbar klappt. Beim Erstellen werden Name, Koordinaten sowie die Größe übergeben. Man kann Größe und Position dann auch über eine Funktion verändern, was aber ziemlich mühselig ist. Anstatt immer neue Koordinaten einzugeben, möchte ich gerne die Rechtecke per drag&drop bewegen können. Wie kann ich das ganze antsellen? Ich habe nämlich gelesen, dass man keinen MouseListener zu Graphics hinzufügen kann.
[CODE lang="java" title="Die Klasse, welche die Rechtecke darstellt."]public class Sphere {
private String name;
private int xSize;
private int ySize;
private int xPos; // vom Start
private int yPos;
private Color color;
private List<Node> nodes = new ArrayList<>();
public Sphere(String name, int xSize, int ySize, int xPos, int yPos, Color color){
this.name = name;
this.xSize = xSize;
this.ySize = ySize;
this.xPos = xPos;
this.yPos = yPos;
this.color = color;
}
public void draw(Graphics g) {
g.drawRoundRect(this.xPos,this.yPos,this.xSize,this.ySize, 15, 15);
g.setColor(this.color);
g.fillRoundRect(this.xPos,this.yPos,this.xSize,this.ySize, 15, 15);
g.setColor(Color.BLACK);
g.setFont(new Font("default", Font.BOLD,12));
g.drawString(this.name,xPos, yPos - 10);
}[/CODE]
[CODE lang="java" title="Im JFrame werden alle Objekte der Listen gezeichnet."] @Override
public void paintComponent(Graphics g) {
ArrayList<Sphere> spheres = controller.getBusinessLogic().getDiagram().getSpheres();
ArrayList<Node> nodes = controller.getBusinessLogic().getDiagram().getNodes();
ArrayList<Edge> edges = controller.getBusinessLogic().getDiagram().getEdges();
for (Sphere sphere : spheres) {
sphere.draw(g);
}
for (Node node : nodes) {
node.draw(g);
}
for (Edge edge : edges) {
edge.draw(getGraphics());
}
}[/CODE]
in meinem derzeitigen Projekt, kann ich mehrere Rechtecke zeichnen lassen, was wunderbar klappt. Beim Erstellen werden Name, Koordinaten sowie die Größe übergeben. Man kann Größe und Position dann auch über eine Funktion verändern, was aber ziemlich mühselig ist. Anstatt immer neue Koordinaten einzugeben, möchte ich gerne die Rechtecke per drag&drop bewegen können. Wie kann ich das ganze antsellen? Ich habe nämlich gelesen, dass man keinen MouseListener zu Graphics hinzufügen kann.
[CODE lang="java" title="Die Klasse, welche die Rechtecke darstellt."]public class Sphere {
private String name;
private int xSize;
private int ySize;
private int xPos; // vom Start
private int yPos;
private Color color;
private List<Node> nodes = new ArrayList<>();
public Sphere(String name, int xSize, int ySize, int xPos, int yPos, Color color){
this.name = name;
this.xSize = xSize;
this.ySize = ySize;
this.xPos = xPos;
this.yPos = yPos;
this.color = color;
}
public void draw(Graphics g) {
g.drawRoundRect(this.xPos,this.yPos,this.xSize,this.ySize, 15, 15);
g.setColor(this.color);
g.fillRoundRect(this.xPos,this.yPos,this.xSize,this.ySize, 15, 15);
g.setColor(Color.BLACK);
g.setFont(new Font("default", Font.BOLD,12));
g.drawString(this.name,xPos, yPos - 10);
}[/CODE]
[CODE lang="java" title="Im JFrame werden alle Objekte der Listen gezeichnet."] @Override
public void paintComponent(Graphics g) {
ArrayList<Sphere> spheres = controller.getBusinessLogic().getDiagram().getSpheres();
ArrayList<Node> nodes = controller.getBusinessLogic().getDiagram().getNodes();
ArrayList<Edge> edges = controller.getBusinessLogic().getDiagram().getEdges();
for (Sphere sphere : spheres) {
sphere.draw(g);
}
for (Node node : nodes) {
node.draw(g);
}
for (Edge edge : edges) {
edge.draw(getGraphics());
}
}[/CODE]