Auf Thema antworten

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]



Oben