Die Namen sind im Moment praktisch. Da ich gerade ausprobiere sind es zwei verschiedene Methoden "zoomeMitDiesenParametern" (in der for-Schleife nicht identisch).
[CODE lang="java" title="Start-Klasse"]package testtest;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import testtest.Test.Drawing;
import testtest.Test.DrawingPanel;
public class Start extends JPanel{
static final int FPS_MIN = 0;
static final int FPS_MAX = 600;
static final int FPS_INIT = 100; //initial
static JSlider jslider = new JSlider(JSlider.VERTICAL,FPS_MIN, FPS_MAX, FPS_INIT);
public Start() {
super();
this.setLayout(new FlowLayout());
setBackground(Color.lightGray);
setSize(300,200);
setLocation(200,100);
setVisible(true);
jslider.setValue(52);
jslider.setMajorTickSpacing(100);
jslider.setMinorTickSpacing(10);
jslider.setPaintTicks(true);
jslider.setPaintLabels(true);
jslider.setBorder(
BorderFactory.createEmptyBorder(0,0,10,0));
Font font = new Font("Serif", Font.ITALIC, 9);
jslider.setFont(font);
jslider.setPreferredSize(new Dimension(100, 300));
JLabel readOut = new JLabel(jslider.getValue()+"");
jslider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
String s = Integer.toString(jslider.getValue());
readOut.setText(s + " ");
readOut.revalidate();
}
});
JPanel panel = new JPanel(new GridLayout(0,2));
panel.add(jslider);
panel.add(readOut);
JFrame fr = new JFrame();
Container contentPane = fr.getContentPane();
// contentPane.add(textControlsPane, BorderLayout.EAST);
contentPane.add(panel, BorderLayout.CENTER);
// contentPane.add(buttonPanel, BorderLayout.SOUTH);
fr.setBounds(1700,10,280,580);
fr.setVisible(true);
}
/**TEST**/
private static ArrayList<Point> punkteListe = new ArrayList<Point>();
public static ArrayList<Point> getPunkteListe() {
return punkteListe;
}
public static void setPunkteListe(ArrayList<Point> punkteListe) {
Start.punkteListe = punkteListe;
}
public static void punkteListeBefüllen(Point2D punkt) {
punkteListe.add((Point) punkt);
setPunkteListe(punkteListe);
//erste Ausgabe
System.out.println("PunkteListe: " + punkteListe);
}
public static ArrayList<Point> getPunkte() {
return punkteListe;
}
static Point2D[] points = new Point2D[2];
static int count = 0;
public static void zoomeMitDiesenParametern(ArrayList<Point> punkteListe, Drawing drawing,DrawingPanel panel) {
// DrawingPanel panel = new DrawingPanel(jslider);
for (int ix=0; ix<punkteListe.size(); ix++) {
points[count] = punkteListe.get(ix);
System.out.println(" Punkt von PunkteLinie: "+points[count]);
}
count = (count + 1) % 2;
System.out.println("count: "+count);
if (count == 0) {
System.out.println("PunkteLinie: "+points[0]+", "+points[1]);
drawing.add(new Line2D.Double(panel.paintPoint(points[0]), panel.paintPoint(points[1])));
System.out.println("PunkteLinie: " + panel.paintPoint(points[0])+", "+ panel.paintPoint(points[1]));
}
}
/**TEST**/
public static void main(String[] args)
{
Drawing drawing = new Drawing();
drawing.add(new Line2D.Double(100, 100, 150, 150));
createDrawingFrame(createDrawingPanel(drawing)).setVisible(true);
createDrawingFrame(createDrawingPanel(drawing)).setVisible(true);
new Start();
/**TEST**/
Point2D d = new Point(3,5);
Point2D e = new Point(5,15);
punkteListeBefüllen(d);
punkteListeBefüllen(e);
/**TEST**/
}
public static JFrame createDrawingFrame(DrawingPanel panel) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(panel);
frame.setSize(800, 600);
return frame;
}
private static DrawingPanel createDrawingPanel(Drawing drawing) {
DrawingPanel panel = new DrawingPanel(jslider);
panel.setDrawing(drawing);
panel.addMouseListener(new MouseAdapter() {
// Point2D[] points = new Point2D[2];
// int count = 0;
@Override
public void mouseClicked(MouseEvent e) {
Point2D ePoint = panel.userPoint(e.getPoint()); //MouseEvent setzt zwei Punkte, diese in user-Koordinaten, über paint ins orig System
punkteListeBefüllen(ePoint); //Für Zoomen jSlider
System.out.println("PunkteListe getPunkte: " + getPunkte());
// nok -- das funktioniert nicht
zoomeMitDiesenParametern(punkteListe, drawing, panel);
// points[count] = e.getPoint();
/** points[count] = ePoint;
count = (count + 1) % 2;
if (count == 0) {
drawing.add(new Line2D.Double(panel.paintPoint(points[0]), panel.paintPoint(points[1])));
}
**/
/**ok -- das hier funktioniert
for (int ix=0; ix<punkteListe.size(); ix++) {
points[count] = punkteListe.get(ix);
}
count = (count + 1) % 2;
if (count == 0) {
drawing.add(new Line2D.Double(panel.paintPoint(points[0]), panel.paintPoint(points[1])));
}
/** **/
}
});
return panel;
}
}
[/CODE]
[CODE lang="java" title="Test-Klasse"]package testtest;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.util.*;
import java.util.List;
public class Test {
public static interface DrawingListener {
void modified();
}
public static class Drawing {
private List<Shape> shapes = new ArrayList<>();
private List<DrawingListener> listeners = new ArrayList<>();
public List<Shape> getShapes() {
return shapes;
}
public void add(Shape shape) {
shapes.add(shape);
modified();
}
public void remove(Shape shape) {
shapes.remove(shape);
modified();
}
public void addListener(DrawingListener l) {
listeners.add(l);
}
public void removeListener(DrawingListener l) {
listeners.remove(l);
}
public void modified() {
for (DrawingListener l : listeners) {
l.modified();
}
}
}
static class DrawingPanel extends JComponent {
private static int mousX, mousY;
private static boolean mouseclicked = false;
static JSlider jslider = new JSlider();
private double xmin;
private double xmax;
private double ymin;
private double ymax;
private double x0;
private double y0;
private double ppcm;
double step = 51.90288713910761; //51.90288713910761; //Zoom-Faktor initialisieren (über Slider änderbar)
double n = 10;
double m = 10;
double j1 = 0;
double j = j1+0;
double j2 = 0;
int p = 0;
double t = 0*step/n;
int k1 = 0;
double k = k1*step;
int nb = 0;
int l1 = 0;
double l = l1*step;
double f = n * t + k;
double g = m * t + l;
/*********************************/
Point p0 = new Point();
Point p1 = new Point();
double tx0 = 0;
double ty0 = 0;
double tx1 = 0;
double ty1 = 0;
Line2D.Double zeichenLinie2 = new Line2D.Double(0,0,0,0);
private Drawing drawing;
private DrawingListener listener = () -> repaint();
private Vector vector;
// Start start = new Start();
//private static ArrayList<Point> punkteListe = new ArrayList<Point>();
/*********************************/
public DrawingPanel(JSlider jslider) {
jslider.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSlider model =
(JSlider)e.getSource();
if(model.getValueIsAdjusting()) {
int min = model.getMinimum(),
max = model.getMaximum(),
span = max - min,
value = model.getValue();
step = value;
if (step <= 0) {
// n = 1;
// m=1;
step = 1;
System.out.println("STEP < 1 => STEP = 1");
}
k = k1*step;
f = n * t + k;
l = l1*step;
g = m * t + l;
zoomeMitDiesenParametern(punkteListe, drawing);
// revalidate();
// repaint();
}
}
});
}
/**TEST**/
static Start start = new Start();
private static ArrayList<Point> punkteListe = new ArrayList<Point>();
public static void punkteListeBefüllen(Point2D punkt) {
punkteListe.add((Point) punkt);
//erste Ausgabe
System.out.println("PunkteListe: " + punkteListe);
}
public static ArrayList<Point> getPunkte() {
return punkteListe;
}
static Point2D[] points = new Point2D[2];
static int count = 0;
public void zoomeMitDiesenParametern(ArrayList<Point> punkteListe, Drawing drawing) {
// DrawingPanel panel = new DrawingPanel(jslider);
punkteListe = start.getPunkteListe();
/** for (int ix=0; ix<punkteListe.size(); ix++) {
points[count] = punkteListe.get(ix);
System.out.println("TEST Punkt von PunkteLinie: "+points[count]);
count = (count + 1) % 2;
System.out.println("count TEST: "+count);
if (count == 0) {
System.out.println("PunkteLinie TEST: "+points[0]+", "+points[1]);
drawing.add(new Line2D.Double(paintPoint(points[0]), paintPoint(points[1])));
// System.out.println("PunkteLinie: " + paintPoint(points[0])+", "+ paintPoint(points[1]));
}
}**/
/**ok -- das hier funktioniert **/
for (int ix=0; ix<punkteListe.size(); ix++) {
points[count] = punkteListe.get(ix);
count = (count + 1) % 2;
if (count == 0) {
drawing.add(new Line2D.Double(paintPoint(points[0]), paintPoint(points[1])));
}
}
/** **/
}
/**TEST**/
public double userx (int px) { //x,y-Wert eines Punktes ins eigene Koordinatensystem umrechnen
return (px-(x0+k))/(step/n)+j1;
}
public double usery (int py) {
return ((y0+l)-py)/(step/m)+j2;
}
public double paintx ( double ux) { //zeichnen der Punkte, umrechnen ins ursprüngl. Koord.
double x1 = (ux*(step/n)+(x0+k));
return x1;
}
public double painty (double uy) {
double y1 = (y0+l)-(uy*(step/m));
return y1;
}
/** TEST **/
public double userdx (double px) {
return (px-(x0+k))/(step/n)+j1;
}
public double userdy (double py) {
return ((y0+l)-py)/(step/m)+j2;
}
public Point2D userPoint(Point2D normalPoint2D) {
double px = normalPoint2D.getX();
double py = normalPoint2D.getY();
int p0x =(int)userdx(px);
int p0y =(int)userdy(py);
Point2D userPoint = new Point(p0x,p0y);
return userPoint;
}
public Point2D paintPoint(Point2D userPoint2D) {
double px = userPoint2D.getX();
double py = userPoint2D.getY();
int p1x = (int)paintx(px);
int p1y = (int)painty(py);
Point2D paintPoint = new Point(p1x,p1y);
return paintPoint;
}
/** TEST ENDE **/
public void setDrawing(Drawing newDrawing) {
if (drawing != null) {
drawing.removeListener(listener);
}
drawing = newDrawing;
if (drawing != null) {
drawing.addListener(listener);
}
}
/** public void update(Graphics graphics)
{
paintComponent(graphics); //paint(g) auskommentiert -- wenn update zuerst claer aufruft und dann paint wird der Click übermalt.
//zum Beispiel Fenster in der Größe ziehen ruft das update Systems auf. Die Methode update wird nicht überschrieben und
// ein clear wird ausgeführt.
System.out.println("update wurde aufgerufen");
} **/
public void paintComponent(Graphics gr) {
super.paintComponent(gr);
if (drawing == null) {
return;
}
Graphics2D g2 = (Graphics2D) gr;
for (Shape shape : drawing.getShapes()) {
g2.draw(shape);
}
String str;
g2.setColor(Color.red);
//super.paint(g2);
x0 = this.getWidth() / 2;
y0 = this.getHeight() / 2;
if(k<=0) {
xmin = (userx(0)+f)-j1;
xmax = userx(this.getWidth())-f-j1;
} else {
xmin = userx(0)-f-j1;
xmax = userx(this.getWidth())+f-j1;
}
if(l<=0) {
ymin = usery(this.getHeight())+g-j2;
ymax = (usery(0)-g)-j2;
} else {
ymin = usery(this.getHeight()) - g -j2;
ymax = usery(0)+g -j2;
}
ppcm = 226/2.54;
ppcm = Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println("Toolkit DPI?: " + ppcm);
ppcm = 10 * 226/2.54;
System.out.println("Berechnet: " + ppcm);
System.out.println("newnewnenwnenDRAWDRAWDRAWPPPPPPPPPPPPPPPPP"+step+"/"+j1);
drawMillipier(g2);
// Abstand Testen (pixel nach cm)
Point a = new Point(1,2);
Point b = new Point(2,1);
Point c = new Point(3,5);
Point aa = new Point(3,6);
Line2D.Double zeichenLinie = new Line2D.Double(paintx(1-j1), painty(2-j2), paintx(2-j1), painty(1-j2));
Line2D.Double zeichenLinie1 = new Line2D.Double(paintx(2-j1), painty(1-j2), paintx(3-j1), painty(5-j2));
//Line2D.Double zeichenLinie2 = new Line2D.Double(paintx(tx0-j1), painty(ty0-j2), paintx(tx1-j1), painty(ty1-j2));
g2.draw(zeichenLinie);
g2.draw(zeichenLinie1);
}
/** Point2D d = new Point(3,5);
Point2D e = new Point(5,15);
private ArrayList<Point> punkteListe = new ArrayList<Point>();
public void punkteListeBefüllen(Point2D punkt) {
punkteListe.add((Point) punkt);
System.out.println("PunkteListe: " + punkteListe);
}
public ArrayList zoomeMitDiesenParametern(ArrayList punkteListe){
return punkteListe;
}**/
private void drawMillipier(Graphics2D g2d) {
g2d.setColor(new Color(0,0,0));
g2d.setStroke(new BasicStroke(0.8f));
for (j =(int) xmin; j <= xmax+k; j++) { // Einteilung der x-Achse
if (j%n==0){
Line2D.Double xstriche = new Line2D.Double(paintx(j),painty(-1),paintx(j),painty(1));
g2d.draw(xstriche);
}
}
for (j = (int) ymin; j <= ymax; j++) { // Einteilung der y-Achse
if (j%m==0){
Line2D.Double ystriche = new Line2D.Double(paintx(-1),painty(j),paintx(1),painty(j));
g2d.draw(ystriche);
}
}
// Koordinatenkreuz // dicke Linien
for (p = (int)xmin; p <= xmax; p++) {
if (p%n==0){
///// System.out.println("xmin: "+(int)xmin+" xmax: "+(int)xmax+" Differenz: "+(int)(xmin-xmax));
g2d.setColor(new Color(0,0,0));
g2d.setStroke(new BasicStroke(1));
Line2D.Double xAchse = new Line2D.Double(paintx(xmin), painty(0), paintx(xmax), painty(0));
g2d.draw(xAchse);
Line2D.Double yAchse = new Line2D.Double(paintx(0), painty(ymin), paintx(0), painty(ymax));
g2d.draw(yAchse);
}
}
}
}
/** public static JFrame createDrawingFrame(DrawingPanel panel) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(panel);
frame.setSize(800, 600);
return frame;
}
private static DrawingPanel createDrawingPanel(Drawing drawing) {
DrawingPanel panel = new DrawingPanel();
panel.setDrawing(drawing);
panel.addMouseListener(new MouseAdapter() {
Point2D[] points = new Point2D[2];
int count = 0;
@Override
public void mouseClicked(MouseEvent e) { //MouseEvent setzt zwei Punkte, diese in user-Koordinaten, über paint ins orig System
points[count] = e.getPoint();
count = (count + 1) % 2;
if (count == 0) {
drawing.add(new Line2D.Double(points[0], points[1]));
}
}
});
return panel;
}**/
/** public void run() {
Drawing drawing = new Drawing();
drawing.add(new Line2D.Double(100, 100, 150, 150));
createDrawingFrame(createDrawingPanel(drawing)).setVisible(true);
createDrawingFrame(createDrawingPanel(drawing)).setVisible(true);
}
public static void main(String[] args) {
// SwingUtilities.invokeLater(() -> new Test().run());
Drawing drawing = new Drawing();
drawing.add(new Line2D.Double(100, 100, 150, 150));
createDrawingFrame(createDrawingPanel(drawing)).setVisible(true);
createDrawingFrame(createDrawingPanel(drawing)).setVisible(true);
}**/
}[/CODE]