Koordinatensystem Einheitenlinien

Diskutiere Koordinatensystem Einheitenlinien im Application Tier Forum; Hallo Leute, ich habe mit meinem Programm ein kleines Problem. Heute Mittag wurde das Koordinatensystem auf einem anderen Computer noch richtig...

  1. Alex2013
    Alex2013 Mitglied
    Hallo Leute,

    ich habe mit meinem Programm ein kleines Problem. Heute Mittag wurde das Koordinatensystem auf einem anderen Computer noch richtig dargestellt. Jetzt zu Hause wird die Grafik nicht mehr richtig generiert. Kann mir evtl. jemand sagen woran das liegt?
    Ich habe bereits überprüft, ob mir in der Console an möglichen kritischen Stellen Fehler ausgegeben werden. Dem ist aber nicht so. Das Programm wird sauber compiliert.

    Hier der Code:
    Code (Java):

    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Container;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Toolkit;

    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;

    public class Koordinatensystem extends JFrame {
     
       SetzeKoordinaten sk;
       private static final long serialVersionUID = 1L;
       JPanel zeichnenbrett = new JPanel();
       JPanel eingabebrett= new JPanel();
       JTextField eingX=new JTextField(10),eingY=new JTextField(10);
       JLabel xEingabe=new JLabel("x Koordinate: ",JLabel.RIGHT),yEingabe=new JLabel("y Koordinate: ",JLabel.RIGHT);
       int x,y,xN,yN;
       Container c1,c2;
     
       Dimension d=Toolkit.getDefaultToolkit().getScreenSize().getSize();
       int h=(int)d.height-(d.height/4);int w=(int)d.width-(d.width/4);
       int w2=getWidth();int h2=300;
       Integer[] xKo = new Integer[8];
       Integer[] yKo = new Integer[8];
     
       public Koordinatensystem() {
         setSize(w,h);
         setLocationRelativeTo(null);
         setLayout(new BorderLayout());
         add(zeichnenbrett,BorderLayout.CENTER);
         add(eingabebrett,BorderLayout.SOUTH);
         eingabebrett.setBackground(Color.BLACK);
         eingabebrett.add(eingX);
         eingabebrett.add(eingY);
         eingabebrett.setSize(w2, h2);
         setVisible(true);
         setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
         setResizable(false);
       }
     
       public void paint(Graphics g) {
         super.paintComponents(g);
         //Mit und ohne die Graphics Zeile gibt es keinen Unterschied. Daher ist sie jetzt nicht auskommentiert
         Graphics2D g2 = (Graphics2D) g;

         g.drawLine(0, zeichnenbrett.getHeight() / 2, zeichnenbrett.getWidth(), zeichnenbrett.getHeight() / 2);
         g.drawLine(zeichnenbrett.getWidth() / 2, 0, zeichnenbrett.getWidth() / 2, zeichnenbrett.getHeight());
       
         // x linien
         String[] line = new String[getWidth()];
       
         // y linien
         String[] line2 = new String[getHeight()];
       
       
         for (int i = 0; i < line.length; i++) {
           g.drawLine((zeichnenbrett.getWidth() / 2) - 5, y += 10, (zeichnenbrett.getWidth() / 2) + 5, y);
         }
       
         for (int j = 0; j < line2.length; j++) {
           g.drawLine(x += 10, (zeichnenbrett.getHeight() / 2) - 5, x, (zeichnenbrett.getHeight() / 2) + 5);
         }
       
    ////     String x=""+sk.xKo.toString();String y=""+sk.yKo.toString(); //int xKo,yKo;
    ////     String xN=""+sk.getxKoN();String yN=""+sk.getyKoN();
    //    
    //     g.drawLine(x,y,xN,yN);

       }
     
    //   public void wandleKomponenten(int x1,int xN,int y1,int yN,SetzeKoordinaten sk)
    //   {System.out.println("x6");
    //     x1=sk.getEingX();y1=sk.getEingY();xN=sk.getxKoN();yN=sk.getyKoN();
    //     System.out.println("x7");
    //   }
     
     
     
       public static void main(String args[]) {
         new Koordinatensystem();
       }
    }

    [/Java]

    Für Tipps wäre ich dankbar :)
     
    Zuletzt von einem Moderator bearbeitet: 4. Aug. 2015
  2. Vielleicht hilft dir dieser Kurs hier weiter --> (hier klicken)
  3. HarleyDavidson
    HarleyDavidson Mitglied
    Kannst du ein Screenshot schicken, wie es denn richtig aussehen soll?
    Bei mir sieht es so aus:

    2015-08-03 13_26_36-.jpg

    Außerdem hab ich die Zeile
    SetzeKoordinaten sk;
    entfernt. Ist diese Klasse zur Ausführung wichtig?

    Beschreib mal ein bisschen, was man damit machen kann, dann kann ich auch besser testen.
     
  4. Alex2013
    Alex2013 Mitglied
    Also im Prinzip leider nicht. Da es bei mir ja falsch dargestellt wird bzw. so wie bei dir. Es sollten auch noch die einzelnen Einheitenstriche der x und y Achse angezeigt werden. Dies passiert aber nicht bzw. ist einmal kurz sichtbar und wird anschließend von einer anderen Schicht "überzeichnet".
    Zunächst wollte ich per Textfeld einige Variablen setzen können, welche anschließend mit einem Strich verbunden werden. Hinterher wollte ich auch noch einen Zoom oder sonstige Funktionen einbauen. Aber es sollte ja auch erstmal grundlegend funktionieren ;-)

    Zum Ausführen an sich ist die Klasse, die du gelöscht hast nicht wichtig. Aber hiermit sollen ja die Variablen entgegengenommen und gespeichert werden, damit diese anschließend gespeichert werden etc.
     
  5. HarleyDavidson
    HarleyDavidson Mitglied
    Ich habe die Lösung für die fehlerhafte Darstellung gefunden.
    Hier die Erklärung:
    Beim ersten Mal zeichnen des Koordinatensystems ist sind Variablen x und y jeweils 0.
    Dann wird das Fenster neu gezeichnet wegen hinzufügen des JPanels "eingabebrett".
    Dann sind die beiden Variablen x und y aber nicht mehr null, somit werden die Skalenstriche völlig falsch außerhalb des Koordinatensystems gezeichnet.
    Die Lösung ist hier, direkt bei Aufruf der Methode "paint" (also oberhalb der Zeile "super.paintComponent(g);") zu schreiben :
    Code (Java):

    x = 0;
    y = 0;
     
    Dann wird das Fenster richtig dargestellt.

    Nun zum Programmierstil:
    Mit jeder neuen Funktion wird dein Code furchtbar unübersichtlich. Ich empfehle dir hier eine zweite Klasse "ZeichenbrettPanel" zu schreiben, die JPanel erweitert. Dann kannst du die "paint" Methode dorthin auslagern. So hast du den Code für das Darstellen des Koordinatensystems immer schön separat und übersichtlich.

    Ich hoffe, ich konnte dir hier helfen. Viel Erfolg!
     
  6. Alex2013
    Alex2013 Mitglied
    Ja, danke! :)
    Das hat mir schon viel weiter geholfen! :)
    Jetzt muss ich es nur noch hinbekommen, dass die Linien der Y Achse nicht zu tief gehen und dass, wenn Koordinaten eingegeben werden, diese auch gezeichnet werden.

    Ich habe mal einen Screenshot hochgeladen, wie die untere Hälfte aktuell aussieht.

    Mache ich evtl. beim setzen der Koordinaten etwas falsch?
    Hier mal der betreffende Code:

    Code (Java):

    public void setKoordinaten(boolean Stat,int eingX,int eingY,int xKoN,int yKoN,int xAlt,int yAlt,Graphics g)
      {
         Koordinatensystem ko=null;
       
         if(Stat==true)
         {
           this.eingX=xAlt;
           this.eingY=yAlt;
           this.xKoN=Integer.parseInt(ko.eingX.getText());
           this.yKoN=Integer.parseInt(ko.eingY.getText());
           for(int i=1;i<xKo.length;i++)
           {
             for(int j=1;j<yKo.length;j++)
             {
               xKo[i]=this.eingX;
               yKo[j]=this.eingY;
               Stat=true;
             }
             
           }g.drawLine(xAlt, yAlt, xKoN, yKoN);
           
         }
         else
         {
           xKo[0]=this.eingX;
           yKo[0]=this.eingY;
           
           if((ko.eingX.getText()!=null)&&(ko.eingY!=null))
           {
             ko.eingX.setText("");
             ko.eingY.setText("");
           }
           Stat=false;
         }
         
      }
       
       public Integer[] getKoordinaten(int i)
       {
         if(i==1)
         {
            return xKo;
         }
         else
         {
           return yKo;
         }
       }
     
    Vorher hatte ich den Code bei der setKoordinaten Methode bei der If Verzweigung jeweils bei dem anderen Part drin. Dies brachte aber auch keinen Unterschied. Die Koordinaten sind mit gettern und settern ausgestattet.

    Was sagst du dazu?
    Kann man das anders lösen oder ist das schon der richtige Weg?
     

    Anhänge:

    Zuletzt von einem Moderator bearbeitet: 9. Aug. 2015
  7. Alex2013
    Alex2013 Mitglied
    Mit diesem Ansatz kam ich bisher leider auch nicht weiter:

    Code (Java):

    public SetzeKoordinaten(int xKoN,int yKoN,Integer yKo[],Integer xKo[])
    {
         //initialisierung
         this.xKoN=xKoN;
         this.yKoN=yKoN;
         System.out.println("x1_5");
       
         //gesetzt
         xKo[0]=xKoN;
         yKo[0]=yKoN;
         System.out.println("x1_6");
       
         JOptionPane.showMessageDialog(null, "Daten gesetzt","Meldung",JOptionPane.INFORMATION_MESSAGE);
    }
     
       public void altNeu(int xAlt,int yAlt,int xKoN,int yKoN,Integer yKo[],Integer xKo[])
       {
         this.xKo=xKo;
         this.yKo=yKo;
         this.xKoN=xKoN;
         this.yKoN=yKoN;
         this.xAlt=xAlt;
         this.yAlt=yAlt;
         System.out.println("x1_7");
       
         xKo[1]=xKoN;
         yKo[1]=yKoN;
         System.out.println("x1_8");
       
         xAlt=xKoN;
         yAlt=yKoN;
         System.out.println("x1_9");
       
       }
     
    Hätte hierzu noch jemand einen Tipp oder sogar eine Lösung?
     
    Zuletzt von einem Moderator bearbeitet: 9. Aug. 2015
Die Seite wird geladen...

Koordinatensystem Einheitenlinien - Ähnliche Themen

Koordinatensystem
Koordinatensystem im Forum Java Basics - Anfänger-Themen
Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen?
Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? im Forum Java Basics - Anfänger-Themen
Koordinatensystem dynamisch anpassen
Koordinatensystem dynamisch anpassen im Forum Java Basics - Anfänger-Themen
Aufgabe: Koordinaten im Koordinatensystem ausgeben
Aufgabe: Koordinaten im Koordinatensystem ausgeben im Forum Hausaufgaben
1 Quadrant des Koordinatensystems
1 Quadrant des Koordinatensystems im Forum Java Basics - Anfänger-Themen
Thema: Koordinatensystem Einheitenlinien