import java.awt.*;
import java.awt.geom.*;
import java.awt.geom.Line2D.Double;
import javax.swing.*;
import javax.swing.event.*;
public class Testing {
private final JSpinner s1, s2, s3, s4;
public Testing() {
JFrame frame = new JFrame("KSKB");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
final Drawings drawings = new Drawings(50, 100, 300, 100, "aha");
frame.add(drawings);
JToolBar tools = new JToolBar("Tools");
frame.add(tools, BorderLayout.PAGE_START);
ChangeListener changeHandler = new ChangeListener() {
@Override
public void stateChanged(final ChangeEvent e) {
JSpinner source = (JSpinner) e.getSource();
if (source == s1) {
drawings.setI((Integer) s1.getValue());
} else if (source == s2) {
drawings.setJ((Integer) s2.getValue());
} else if (source == s3) {
drawings.setK((Integer) s3.getValue());
} else if (source == s4) {
drawings.setL((Integer) s4.getValue());
}
drawings.repaint();
}
};
s1 = new JSpinner();
s2 = new JSpinner();
s3 = new JSpinner();
s4 = new JSpinner();
JLabel l1 = new JLabel(" i ");
JLabel l2 = new JLabel(" j ");
JLabel l3 = new JLabel(" k ");
JLabel l4 = new JLabel(" l ");
tools.add(l1);
tools.add(s1);
tools.add(l2);
tools.add(s2);
tools.add(l3);
tools.add(s3);
tools.add(l4);
tools.add(s4);
s1.setValue(drawings.getI());
s2.setValue(drawings.getJ());
s3.setValue(drawings.getK());
s4.setValue(drawings.getL());
s1.addChangeListener(changeHandler);
s2.addChangeListener(changeHandler);
s3.addChangeListener(changeHandler);
s4.addChangeListener(changeHandler);
frame.setVisible(true);
}
public static void main(final String args[]) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Testing test = new Testing();
}
});
}
private class Drawings extends JPanel {
private Graphics2D string;
private Double form;
private Font font;
private int symbolfarbenranddicke = 1;
private int symbolranddicke = 1;
private Color symbolrandfarbe = Color.BLACK;
private int i, j, k, l;
private final String firstname;
Drawings(final int i, final int j, final int k, final int l, final String firstname) {
this.i = i;
this.j = j;
this.k = k;
this.l = l;
this.firstname = firstname;
}
@Override
protected void paintComponent(final Graphics g) {
super.paintComponent(g);
string = (Graphics2D) g;
zeichneSymbolPfeil(i, j, k, l, firstname);
}
private void zeichneSymbolPfeil(final int i, final int j,
final int k, final int l, final String firstname) {
string.setColor(Color.black);
form = new Line2D.Double(i, j, k, l);
string.setFont(font);
string.setColor(Color.black);
string.setStroke(dicke(symbolfarbenranddicke));
string.setColor(symbolrandfarbe);
string.setStroke(dicke(symbolranddicke));
string.draw(form);
//WInkel für die Schrift berechnen
double length = Math.sqrt(((k - i) * (k - i)) + ((l - j) * (l - j)));
double angle1 = (k - i) / length;
double angle = Math.acos(angle1);
//Affine transform erstellen
AffineTransform saveAT = string.getTransform();
//String drehen
string.translate((i + ((k - i) / 2)), (j + ((l - j) / 2)));
string.rotate(angle);
string.drawString(firstname, 0, 0);
string.setTransform(saveAT);
}
private Stroke dicke(final int symbolfarbenranddicke) {
return new BasicStroke(symbolfarbenranddicke);
}
private void setI(final int integer) {
i = integer;
}
private void setJ(final int integer) {
j = integer;
}
private void setK(final int integer) {
k = integer;
}
private void setL(final int integer) {
l = integer;
}
public int getI() {
return i;
}
public int getJ() {
return j;
}
public int getK() {
return k;
}
public int getL() {
return l;
}
}
}