JAAA SCHÖNE GRAFIKEN
parent
4b38883cd9
commit
91336d513d
21
Graph.java
21
Graph.java
|
@ -19,12 +19,23 @@ public class Graph
|
||||||
this.nodes.add(new Node(nr));
|
this.nodes.add(new Node(nr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addNode(int nr, int x, int y){
|
||||||
|
this.nodes.add(new Node(nr, x, y));
|
||||||
|
}
|
||||||
|
|
||||||
public void addEdge(Edge e){
|
public void addEdge(Edge e){
|
||||||
this.edges.add(e);
|
this.edges.add(e);
|
||||||
e.getAnfang().addEdge(e);
|
e.getAnfang().addEdge(e);
|
||||||
e.getEnde().addEdge(e);
|
e.getEnde().addEdge(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<Node> getNodes(){
|
||||||
|
return this.nodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArrayList<Edge> getEdges(){
|
||||||
|
return this.edges;
|
||||||
|
}
|
||||||
public void addEdge(int a, int e, int w, boolean g){
|
public void addEdge(int a, int e, int w, boolean g){
|
||||||
Node an = null;
|
Node an = null;
|
||||||
Node en = null;
|
Node en = null;
|
||||||
|
@ -50,7 +61,15 @@ public class Graph
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Node getNode(int x, int y){
|
||||||
|
for(Node n: this.nodes){
|
||||||
|
int dx = n.x - x;
|
||||||
|
int dy = n.y -y;
|
||||||
|
if (dx * dx + dy * dy <= 100) return n;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
public ArrayList<Node> breitensuche(int start){
|
public ArrayList<Node> breitensuche(int start){
|
||||||
ArrayList<Node> ergebnis = new ArrayList<Node>();
|
ArrayList<Node> ergebnis = new ArrayList<Node>();
|
||||||
LinkedList<Node> q = new LinkedList<Node>();
|
LinkedList<Node> q = new LinkedList<Node>();
|
||||||
|
|
79
MyPanel.java
79
MyPanel.java
|
@ -7,16 +7,79 @@ import java.awt.event.*;
|
||||||
|
|
||||||
public class MyPanel extends JPanel
|
public class MyPanel extends JPanel
|
||||||
{
|
{
|
||||||
public boolean linie = false;
|
public Graph g;
|
||||||
public boolean kreis = false;
|
private int nr;
|
||||||
int x = 100;
|
private Node start;
|
||||||
int y = 100000000;
|
private Node nmove;
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
public MyPanel(){
|
||||||
|
g = new Graph();
|
||||||
|
nr = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void press(int x, int y){
|
||||||
|
start = g.getNode(x, y);
|
||||||
|
if ( start == null){
|
||||||
|
g.addNode(nr, x, y);
|
||||||
|
nr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void released (int x, int y){
|
||||||
|
Node ende = g.getNode(x, y);
|
||||||
|
|
||||||
|
if (start != null){
|
||||||
|
if (ende == null){
|
||||||
|
g.addNode(nr, x, y);
|
||||||
|
nr++;
|
||||||
|
ende = g.getNode(x, y);
|
||||||
|
}
|
||||||
|
g.addEdge(start.getNumber(), ende.getNumber(), 1, false);
|
||||||
|
}
|
||||||
|
start = null;
|
||||||
|
nmove=null;
|
||||||
|
}
|
||||||
|
public void move (int x, int y){
|
||||||
|
this. x = x;
|
||||||
|
this. y = y;
|
||||||
|
if(nmove!= null){
|
||||||
|
nmove.x = x;
|
||||||
|
nmove.y =y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void right(int x, int y){
|
||||||
|
this.nmove = g.getNode(x,y);
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void paintComponent(Graphics g){
|
protected void paintComponent(Graphics g){
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
|
for (Node n: this.g.getNodes()){
|
||||||
if (linie) g.drawLine(20,20,200,50);
|
g.drawOval(n.x -10, n.y -10, 20, 20);
|
||||||
if (kreis) g.drawOval(50, 50, 30, 30);
|
g.drawString(""+n.getNumber(), n.x -4 , n.y +5);
|
||||||
|
}
|
||||||
|
for(Edge e: this.g.getEdges()){
|
||||||
|
Node a = e.getAnfang();
|
||||||
|
Node b = e.getEnde();
|
||||||
|
if(a.x > b.x){
|
||||||
|
a=e.getEnde();
|
||||||
|
b=e.getAnfang();
|
||||||
|
}
|
||||||
|
double dx= b.x -a.x;
|
||||||
|
double dy = b.y -a.y;
|
||||||
|
double alpha = Math.atan(dy/dx);
|
||||||
|
|
||||||
|
double ax = a.x + 10* Math.cos(alpha);
|
||||||
|
double ay = a.y + 10* Math.sin(alpha);
|
||||||
|
|
||||||
|
double bx = b.x -10 * Math.cos(alpha);
|
||||||
|
double by = b.y - 10* Math.sin(alpha);
|
||||||
|
|
||||||
|
g.drawLine((int)ax, (int)ay, (int)bx,(int) by);
|
||||||
|
}
|
||||||
|
if(start != null){
|
||||||
|
g.drawLine(start.x, start.y, this.x, this.y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
11
Node.java
11
Node.java
|
@ -6,6 +6,8 @@ public class Node implements Comparable
|
||||||
public int entfernung;
|
public int entfernung;
|
||||||
public Node vorgaenger;
|
public Node vorgaenger;
|
||||||
public boolean bearbeitet;
|
public boolean bearbeitet;
|
||||||
|
public int x;
|
||||||
|
public int y;
|
||||||
|
|
||||||
public Node(int n){
|
public Node(int n){
|
||||||
this.number = n;
|
this.number = n;
|
||||||
|
@ -15,6 +17,15 @@ public class Node implements Comparable
|
||||||
vorgaenger = null;
|
vorgaenger = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Node(int n, int x, int y){
|
||||||
|
this.number = n;
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
this.edges = new ArrayList<Edge>();
|
||||||
|
|
||||||
|
entfernung = -1;
|
||||||
|
vorgaenger = null;
|
||||||
|
}
|
||||||
public int getNumber (){return this.number;}
|
public int getNumber (){return this.number;}
|
||||||
|
|
||||||
public void addEdge(Edge e){
|
public void addEdge(Edge e){
|
||||||
|
|
80
Window.java
80
Window.java
|
@ -11,44 +11,66 @@ public class Window implements ActionListener
|
||||||
public Window(){
|
public Window(){
|
||||||
fenster = new JFrame("Mein erstes Fenster");
|
fenster = new JFrame("Mein erstes Fenster");
|
||||||
fenster.setSize(400,400);
|
fenster.setSize(400,400);
|
||||||
|
|
||||||
|
fenster.setLayout( new BorderLayout());
|
||||||
|
|
||||||
|
JPanel top = new JPanel();
|
||||||
|
top.setBackground(new Color(170,170,170));
|
||||||
|
fenster.add(top, BorderLayout.PAGE_START);
|
||||||
panel = new MyPanel();
|
panel = new MyPanel();
|
||||||
|
|
||||||
fenster.add(panel);
|
fenster.add(panel, BorderLayout.CENTER);
|
||||||
panel.setBackground(new Color(100,100,100));
|
panel.setBackground(new Color(100,100,100));
|
||||||
|
|
||||||
button = new JButton ("Linie");
|
button = new JButton ("Linie");
|
||||||
panel.add(button);
|
top.add(button);
|
||||||
button.addActionListener(this);
|
button.addActionListener(this);
|
||||||
|
|
||||||
button2 = new JButton("Kreis");
|
button2 = new JButton("Kreis");
|
||||||
panel.add(button2);
|
top.add(button2);
|
||||||
button2.addActionListener(this);
|
button2.addActionListener(this);
|
||||||
|
|
||||||
|
|
||||||
fenster.setVisible(true);
|
fenster.setVisible(true);
|
||||||
|
panel.addMouseMotionListener(new MouseMotionListener(){
|
||||||
fenster.addMouseListener(new MouseListener(){
|
public void mouseDragged(MouseEvent e){
|
||||||
public void MouseEntered(MouseEvent e){};
|
panel.move((int) e.getPoint().getX(), (int) e.getPoint().getY());
|
||||||
public void MousePressed(MouseEvent e){
|
fenster.repaint();}
|
||||||
System.out.println("( " + e.getPoint().getX() + " | " + e.getPoint().getY() + " )");
|
|
||||||
panel.x = (int)e.getPoint().getX();
|
public void mouseMoved(MouseEvent e){
|
||||||
panel.y = (int)e.getPoint().getY();
|
panel.move((int) e.getPoint().getX(), (int) e.getPoint().getY());
|
||||||
fenster.repaint();
|
fenster.repaint();
|
||||||
|
}
|
||||||
};
|
});
|
||||||
public void MouseReleased(MouseEvent e){};
|
panel.addMouseListener(new MouseListener(){
|
||||||
public void MouseCicked(MouseEvent e){};
|
public void mouseEntered(MouseEvent e){};
|
||||||
public void MouseExited(MouseEvent e){};
|
|
||||||
|
public void mousePressed(MouseEvent e){
|
||||||
});
|
if (e.getButton()== MouseEvent.BUTTON1){
|
||||||
|
panel.press((int) e.getPoint().getX(), (int) e.getPoint().getY());
|
||||||
|
}
|
||||||
|
if (e.getButton()== MouseEvent.BUTTON3){
|
||||||
|
panel.right((int) e.getPoint().getX(), (int) e.getPoint().getY());
|
||||||
|
}
|
||||||
|
fenster.repaint();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
public void mouseReleased(MouseEvent e){
|
||||||
|
panel.released((int) e.getPoint().getX(), (int) e.getPoint().getY());
|
||||||
|
fenster.repaint();
|
||||||
|
};
|
||||||
|
|
||||||
|
public void mouseClicked(MouseEvent e){};
|
||||||
|
|
||||||
|
public void mouseExited(MouseEvent e){};
|
||||||
|
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void actionPerformed(ActionEvent e){
|
public void actionPerformed(ActionEvent e){
|
||||||
if (e.getSource() == this.button) panel.linie = !panel.linie;
|
if (e.getSource() == this.button)
|
||||||
if (e.getSource() == this.button2) panel.kreis = !panel.kreis;
|
if (e.getSource() == this.button2)
|
||||||
fenster.repaint();
|
fenster.repaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue