Dreieck zeichnen

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

ich würde gern auf ein Panel ein Dreieck zeichnen. Das geht aber nicht so wie es soll. Da ich neben dem Dreieck auch noch andere Formen (Kreise, Rechtecke) darstellen kann weiß ich nicht warum es beim Dreieck nicht geht. Der Code ist an sich fast der Gleiche. Zwischen Haupt- und Unterklassen, bed'findet sich noch eine abstrakte Klasse.

Erst nachdem ich das Panel einmal repaintet habe wird das Dreieck gezeichnet. Aber warum? Und warum kann ich das Dreieck nicht bwegen?

Ich hab mal all das rausgelöscht, das ich für unnötig hielt. Ist leider immer noch ziemlich viel:
Code:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

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

/**
 * This is the main class
 * @author antoras
 *
 */
public class myGF extends JFrame {
	
	private  JPanel panel;
	private final JButton button_triangle = new JButton("Dreieck");
	private final JButton button_display = new JButton("anzeigen");
	private final JButton button_hide = new JButton("ausblenden");
	
	/*
	 * 0 = circle
	 * 1 = rectangle
	 * 2 = triangle
	 */
	private final GeometryForm[] form = new GeometryForm[3];
	
	/*
	 * 0 = nothing
	 * 1 = circle
	 * 2 = rectangle
	 * 3 = triangle
	 */
	private int object = 0;
		
	
	/**
	 * Launch the application
	 * @param args
	 */
	public static void main(final String args[]) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					final myGF frame = new myGF();
					frame.setVisible(true);
				} catch (final Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame
	 */
	public myGF() {
		super("Geometry Forms");
		setBounds(100, 100, 500, 375);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		try {
			initGUI();
		} catch (final Throwable e) {
			e.printStackTrace();
		}
	}
	
	private void initGUI() throws Exception {
		
		/**
		 * paint on a panel
		 */
		panel = new JPanel(new FlowLayout()){
			public void paintComponent(final Graphics g) {
				super.paintComponent(g);
				/*
				 * Create the form if it is not created yet
				 * AND
				 * Create if --object-- agree with the form
				 */				
				if (object == 3) {
					if (form[2] == null) {
						form[2] = new Triangle(100, 100, 140, 150, 60, 150);
					}
					form[2].paint(g);
				}
			}
		};
		panel.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent e) {
				move(e);
			}
		});
		getContentPane().add(panel, BorderLayout.CENTER);

		
		button_triangle.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent e) {
				object = 3;
				panel.repaint();
			}
		});
		panel.add(button_triangle);

		
		button_display.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent e) {
				form[2].display();							
				panel.repaint();
			}
		});
		panel.add(button_display);

		
		button_hide.addMouseListener(new MouseAdapter() {
			public void mouseClicked(final MouseEvent e) {
				form[2].hide();
				panel.repaint();
			}
		});
		panel.add(button_hide);
	}
	
	/**
	 * Move the geometry form which is indicated
	 * @param e
	 */
	protected void move(final MouseEvent e) {
		final int x = e.getX();
		final int y = e.getY();		
		if (object == 3) {
			form[2].go(x, y);
		}
		panel.repaint();
	}
}



Code:
import java.awt.Graphics;

/**
 * Class to create a triangle
 * @author antoras
 *
 */
public class Triangle extends GeometryForm {
	
	private int xPos2;
	private int xPos3;
	private int yPos2;
	private int yPos3;
	
	private int[] xPositions = {xPos, xPos2, xPos3};
	private int[] yPositions = {yPos, yPos2, yPos3};

	public Triangle(final int x1, final int y1, final int x2, final int y2,	final int x3, final int y3) {
		xPositions[0] = x1;
		yPositions[0] = y1;
		xPositions[1] = x2;
		yPositions[1] = y2;
		xPositions[2] = x3;
		yPositions[2] = y3;
	}

	@Override
	protected void paint(Graphics g) {
		if (show) {
			g.drawPolygon(xPositions, yPositions, xPositions.length);
		}		
	}
	
	@Override
	protected void go(final int x, final int y) {
		if (xPositions[0] < x) {
			xPos = xPos + stepsize;
			xPos2 = xPos2 + stepsize;
			xPos3 = xPos3 + stepsize;
		}
        if (xPositions[0] > x) {
			xPos = xPos - stepsize;
			xPos2 = xPos2 - stepsize;
			xPos3 = xPos3 - stepsize;
        }
        if (yPositions[0] < y) {
			yPos = yPos + stepsize;
			yPos2 = yPos2 + stepsize;
			yPos3 = yPos3 + stepsize;
        }
        if (yPositions[0] > y) {
			yPos = yPos - stepsize;
			yPos2 = yPos2 - stepsize;
			yPos3 = yPos3 - stepsize;
        }
    }
}
 

Marco13

Top Contributor
Das kann man mit Copy&Paste rauskopieren, compilieren und starten - schon praktisch, wenn so eine GeometryForm-Dummy-Klasse dabei ist
Code:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

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

import java.awt.Graphics;


/**
* This is the main class
* @author antoras
*
*/
public class myGF extends JFrame {

   private  JPanel panel;
   private final JButton button_triangle = new JButton("Dreieck");
   private final JButton button_display = new JButton("anzeigen");
   private final JButton button_hide = new JButton("ausblenden");

   /*
    * 0 = circle
    * 1 = rectangle
    * 2 = triangle
    */
   private final GeometryForm[] form = new GeometryForm[3];

   /*
    * 0 = nothing
    * 1 = circle
    * 2 = rectangle
    * 3 = triangle
    */
   private int object = 3;


   /**
    * Launch the application
    * @param args
    */
   public static void main(final String args[]) {
      EventQueue.invokeLater(new Runnable() {
         public void run() {
            try {
               final myGF frame = new myGF();
               frame.setVisible(true);
            } catch (final Exception e) {
               e.printStackTrace();
            }
         }
      });
   }

   /**
    * Create the frame
    */
   public myGF() {
      super("Geometry Forms");
      setBounds(100, 100, 500, 375);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      try {
         initGUI();
      } catch (final Throwable e) {
         e.printStackTrace();
      }
   }

   private void initGUI() throws Exception {

      /**
       * paint on a panel
       */
      panel = new JPanel(new FlowLayout()){
         public void paintComponent(final Graphics g) {
            super.paintComponent(g);
            /*
             * Create the form if it is not created yet
             * AND
             * Create if --object-- agree with the form
             */
            if (object == 3) {
               if (form[2] == null) {
                  form[2] = new Triangle(100, 100, 140, 150, 60, 150);
               }
               form[2].paint(g);
            }
         }
      };
      panel.addMouseListener(new MouseAdapter() {
         public void mouseClicked(final MouseEvent e) {
            move(e);
         }
      });
      getContentPane().add(panel, BorderLayout.CENTER);


      button_triangle.addMouseListener(new MouseAdapter() {
         public void mouseClicked(final MouseEvent e) {
            object = 3;
            panel.repaint();
         }
      });
      panel.add(button_triangle);


      button_display.addMouseListener(new MouseAdapter() {
         public void mouseClicked(final MouseEvent e) {
            form[2].display();
            panel.repaint();
         }
      });
      panel.add(button_display);


      button_hide.addMouseListener(new MouseAdapter() {
         public void mouseClicked(final MouseEvent e) {
            form[2].hide();
            panel.repaint();
         }
      });
      panel.add(button_hide);
   }

   /**
    * Move the geometry form which is indicated
    * @param e
    */
   protected void move(final MouseEvent e) {
      final int x = e.getX();
      final int y = e.getY();
      if (object == 3) {
         form[2].go(x, y);
      }
      panel.repaint();
   }
}

abstract class GeometryForm
{
    abstract void paint(Graphics g);
    int xPos;
    int yPos;
    int xPos2;
    int yPos2;
    int xPos3;
    int yPos3;
    boolean show = true;
    int stepsize = 10;
    void display(){}
    void hide(){}
    abstract void go(int x, int y);

}

/**
* Class to create a triangle
* @author antoras
*
*/
class Triangle extends GeometryForm {

   private int xPos2;
   private int xPos3;
   private int yPos2;
   private int yPos3;

   private int[] xPositions = {xPos, xPos2, xPos3};
   private int[] yPositions = {yPos, yPos2, yPos3};

   public Triangle(final int x1, final int y1, final int x2, final int y2,   final int x3, final int y3) {
      xPositions[0] = x1;
      yPositions[0] = y1;
      xPositions[1] = x2;
      yPositions[1] = y2;
      xPositions[2] = x3;
      yPositions[2] = y3;
   }

   @Override
   protected void paint(Graphics g) {
      if (show) {
         g.drawPolygon(xPositions, yPositions, xPositions.length);
      }
   }

   @Override
   protected void go(final int x, final int y) {
      if (xPositions[0] < x) {
         xPos = xPos + stepsize;
         xPos2 = xPos2 + stepsize;
         xPos3 = xPos3 + stepsize;
      }
        if (xPositions[0] > x) {
         xPos = xPos - stepsize;
         xPos2 = xPos2 - stepsize;
         xPos3 = xPos3 - stepsize;
        }
        if (yPositions[0] < y) {
         yPos = yPos + stepsize;
         yPos2 = yPos2 + stepsize;
         yPos3 = yPos3 + stepsize;
        }
        if (yPositions[0] > y) {
         yPos = yPos - stepsize;
         yPos2 = yPos2 - stepsize;
         yPos3 = yPos3 - stepsize;
        }
    }
}

Das Dreieck wird angezeigt. Bewegen kannst du es nicht, weil beim Zeichnen nur die x/yPositions verwendet werden, die aber in der "go"-Methode nicht verändert werden. Ein paar System.out.println("Ändere... Male... Bla") helfen, um dort fehler zu finden...
 

Antoras

Top Contributor
Marco13 hat gesagt.:
Das kann man mit Copy&Paste rauskopieren, compilieren und starten - schon praktisch, wenn so eine GeometryForm-Dummy-Klasse dabei ist
Ähem, war das ironisch gemeint? Hätte die abstrakte Klasse vllt auch noch posten sollen. Sry.
Marco13 hat gesagt.:
Das Dreieck wird angezeigt. Bewegen kannst du es nicht, weil beim Zeichnen nur die x/yPositions verwendet werden, die aber in der "go"-Methode nicht verändert werden. Ein paar System.out.println("Ändere... Male... Bla") helfen, um dort fehler zu finden...
Ok, das war der Fehler. Die xPos und yPos hab ich überhaupt nicht gebraucht. Und angezeigt wurde mir das Dreieck deshalb nicht, weil ich vergessen hatte das show-Attribut richtig zu setzen.

Naja, hätte vllt ein bisschen mehr nach den Fehlern suchen sollen.

Trotzdem, Danke dir. ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
B Hindergrundfarbe in JPanel und Dreieck zeichnen Java Basics - Anfänger-Themen 4
_so_far_away_ pascalsches Dreieck Zentrierung. Java Basics - Anfänger-Themen 12
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
G Magisches Dreieck Java Basics - Anfänger-Themen 2
F Pascalsches Dreieck mit Rückgabewert Java Basics - Anfänger-Themen 2
S Überprüfung rechtwinkliges Dreieck Java Basics - Anfänger-Themen 4
Z Warum kein Dreieck aus Sternen? Java Basics - Anfänger-Themen 9
L Dreieck Java Basics - Anfänger-Themen 22
O Erste Schritte Pascalsche Dreieck Java Basics - Anfänger-Themen 3
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
L Pascalsches Dreieck Java Basics - Anfänger-Themen 4
D Pascal'sches Dreieck Java Basics - Anfänger-Themen 6
N Methoden Gleichseitiges Dreieck erstellen Java Basics - Anfänger-Themen 8
U Dreieck Java Basics - Anfänger-Themen 22
1 2D-Array, dass das pascalsche Dreieck berechnet Java Basics - Anfänger-Themen 2
L Dreieck Kreis Java Basics - Anfänger-Themen 12
B Dreieck Flächenberechnung Java Basics - Anfänger-Themen 2
B Java Grafikprogrammierung Dreieck Java Basics - Anfänger-Themen 6
I Umgedrehtes Dreieck Java Basics - Anfänger-Themen 3
M Dreieck erstellen Java Basics - Anfänger-Themen 17
J Dreieck Ausgeben Java Basics - Anfänger-Themen 3
R Pascalsche Dreieck Java Basics - Anfänger-Themen 4
R Pascalsche Dreieck Java Basics - Anfänger-Themen 8
C Pascalsches Dreieck: Ausgabeproblem Java Basics - Anfänger-Themen 10
K pascalsches Dreieck Java Basics - Anfänger-Themen 8
H Compiler-Fehler Pascalsche Dreieck Java Basics - Anfänger-Themen 2
M Pascalsches Dreieck Java Basics - Anfänger-Themen 12
M Dreieck prüfen Java Basics - Anfänger-Themen 8
W Pascalsches Dreieck Java Basics - Anfänger-Themen 19
E Pascalsche Dreieck aus Java openbook Java Basics - Anfänger-Themen 3
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
D Pascalsches Dreieck Java Basics - Anfänger-Themen 9
H Dreieck aus Zeichen Java Basics - Anfänger-Themen 4
L Paskalsche Dreieck im Array Java Basics - Anfänger-Themen 2
T Pascalsche Dreieck ERKLÄRUNG Java Basics - Anfänger-Themen 6
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
A Problem Gleichseitiges Dreieck aus Sternchen Java Basics - Anfänger-Themen 7
G Pascalsche Dreieck in Dreieckform Java Basics - Anfänger-Themen 2
X Pascalsche Dreieck Java Basics - Anfänger-Themen 6
G Dreieck mit Java Apllet Java Basics - Anfänger-Themen 10
V Dreieck spiegeln Java Basics - Anfänger-Themen 3
L Dreieck soll Farbe ändern Java Basics - Anfänger-Themen 4
L Dreieck füllen Java Basics - Anfänger-Themen 4
X Dreieck ausgeben Java Basics - Anfänger-Themen 3
D Das Problem mit dem Dreieck. Java Basics - Anfänger-Themen 5
B auf der Spitze stehendes Dreieck mit for-Schleifen Java Basics - Anfänger-Themen 6
lan2711 Anfänger: Konstruktion Dreieck Java Basics - Anfänger-Themen 2
G Pascalsches Dreieck Java Basics - Anfänger-Themen 8
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
luggas89 Mit Jframe live zeichnen Java Basics - Anfänger-Themen 4
K 3D Fläche Zeichnen Java Basics - Anfänger-Themen 2
J Bild auf Hintergrundbild zeichnen Java Basics - Anfänger-Themen 5
R Iterativ zeichnen Java Basics - Anfänger-Themen 1
P JFrame, Linien zeichnen, MouseListener Java Basics - Anfänger-Themen 2
KogoroMori21 Mit einer Schleife eine Treppe zeichnen Java Basics - Anfänger-Themen 29
V Speicherzustand zeichnen Java Basics - Anfänger-Themen 0
O Klappt nicht: Ein Panel neu zeichnen Java Basics - Anfänger-Themen 3
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
B Java JFrame zeichnen Java Basics - Anfänger-Themen 4
Mosquera f(x)=x² zeichnen Java Basics - Anfänger-Themen 5
J Graphen in Java zeichnen Java Basics - Anfänger-Themen 11
L Anfängerin möchte Linie zeichnen Java Basics - Anfänger-Themen 8
D JPanel mehrere Formen zeichnen Java Basics - Anfänger-Themen 5
S Zeichnen mit Wiederholungen Java Basics - Anfänger-Themen 12
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
P Einen String mittig zeichnen? Java Basics - Anfänger-Themen 1
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
M Ein Bild durch Objekterzeugung zeichnen Java Basics - Anfänger-Themen 5
W Wie kann ich in Java eine Kurve aus Punkten zeichnen? Java Basics - Anfänger-Themen 25
snipesss Linie zeichnen ohne extra Klasse? Java Basics - Anfänger-Themen 3
C Umrisse von Bilddateien mithilfe Polygonen zeichnen Java Basics - Anfänger-Themen 5
G Aus einem Code ein Sequenzdiagramm zeichnen? Java Basics - Anfänger-Themen 1
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7
B Java Graphen zeichnen - Brauche Hilfe Java Basics - Anfänger-Themen 9
C Schleifenaufgabe - Molekül zeichnen Java Basics - Anfänger-Themen 6
K Ungenauigkeit beim Zeichnen von Funktionen Java Basics - Anfänger-Themen 6
H Linie zeichnen... Java Basics - Anfänger-Themen 16
N Treppe zeichnen Java Basics - Anfänger-Themen 1
M Quadrat zeichnen einfach bitte! Java Basics - Anfänger-Themen 2
P Shape Zeichnen klappt nicht - einlesen der Breite/Höhe schon Java Basics - Anfänger-Themen 1
M in Java zeichnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
J Rechteck zeichnen mit Canvas Java Basics - Anfänger-Themen 7
D Zeichnen, Schleifen Java Basics - Anfänger-Themen 7
S Zeichnen , Schleifen Java Basics - Anfänger-Themen 4
S Rechteck zeichnen Java Basics - Anfänger-Themen 2
S Ein Graphics Obejct mehrmals mit denselben Eigenschaften zeichnen lassen?!?!? Java Basics - Anfänger-Themen 4
S Wo beginnt ein Draw String zu zeichnen. Java Basics - Anfänger-Themen 4
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
llabusch Layout neu zeichnen lassen Java Basics - Anfänger-Themen 2
A Histogramm zeichnen Java Basics - Anfänger-Themen 2
S Punkt in Java zeichnen Java Basics - Anfänger-Themen 14
gamebreiti Methoden JPanel nach clearAll() und add neu zeichnen Java Basics - Anfänger-Themen 1
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben