BorderLayout macht meine Zeichnung kaputt

Status
Nicht offen für weitere Antworten.

raffnix

Bekanntes Mitglied
Hallo.
Ich habe da ein Problem mit dem Layout.

Ich Benutze ein BorderLayout. Beim Start des Programms wird ein Rechteck gezeichnet.
der Zeichenbereich ist CENTER.

Ich fügte noch ein paar Buttons hinzu (NORTH). Nun wird mein Rechteck verschoben gezeichnet.
Wie bekomme ich es hin, das der ZeichenBereich nicht gestaucht wird??
hier mal ein Stück Code.

Code:
mal= new Drawit();
mal.setSize(500,500);

ButtonGroup bgr = new ButtonGroup(); 
move   = new JToggleButton("move");		
..

bgr.add(move);
..
JPanel buttonleiste = new JPanel(new GridLayout(0,5));
buttonleiste.add(move);
..

getContentPane().add(buttonleiste, BorderLayout.NORTH);
getContentPane().add(mal, BorderLayout.CENTER);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocation(100, 100);
}

public static void main(String[] args){
	Handmanager f = new Handmanager();
	f.setVisible(true);
	
}

Ich hoffe jemand weiss hier Rat den ich bin echt ratlos....
 
B

bygones

Gast
es könnte sein, dass das setSize() die Probleme auslöst. Probier stattdessen mal setPreferredSize()
 

Wildcard

Top Contributor
Versuch mal:
Code:
public static void main(String[] args){ 
   Handmanager f = new Handmanager(); 
   f.pack();
   f.setVisible(true); 

}
wenn's nicht funktioniert erklär mal genauer was du mit verschoben meinst, und poste mehr code...
 

raffnix

Bekanntes Mitglied
Danke für die Mühe. aber so funzt es auch nicht.
Mit Verschoben mein ich, daß mein gezeichnetes rechteck 2mal da ist . einmal an der richtigen position und einmal nach unten versetzt.

ohne Buttons. entsteht nur ein Rechteck..
hier mal der ganze code.
es ist etwas viel zum posten aber so kann man es testen.

Code:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JToggleButton;

class Handmanager extends JFrame implements MouseListener, MouseMotionListener{
 HandDrawit mal;
    JToggleButton move;	
	JToggleButton rotate;
	JToggleButton point;
	JToggleButton rect;
	JToggleButton scale;
	
Handmanager(){

mal= new HandDrawit();
mal.addMouseListener(this);
mal.addMouseMotionListener(this);
mal.setPreferredSize(new Dimension(500,500));

ButtonGroup bgr = new ButtonGroup(); 
move   = new JToggleButton("move");		
rotate = new JToggleButton("rotate");
point  = new JToggleButton("point");
rect   = new JToggleButton("rect");
scale  = new JToggleButton("scale");

bgr.add(move);
bgr.add(rotate);
bgr.add(point);
bgr.add(rect);
bgr.add(scale);

JPanel buttonleiste = new JPanel(new GridLayout(0,5));
buttonleiste.add(move);
buttonleiste.add(rotate);
buttonleiste.add(point);
buttonleiste.add(rect);
buttonleiste.add(scale);

getContentPane().add(buttonleiste, BorderLayout.NORTH);//diese Zeile auskomm.  = alles richtig

getContentPane().add(mal, BorderLayout.CENTER);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800,600);
setLocation(100, 100);
}

public static void main(String[] args){
	Handmanager f = new Handmanager();
	f.pack();
	f.setVisible(true);
	
}

public void mouseClicked(MouseEvent e) {
	if(e.getSource() == mal){
		mal.rectPunkte.clear();
		mal.getRectPoint(e.getPoint());
	}
	repaint();
}


public void mouseDragged(MouseEvent e) {
	if(e.getSource() == mal ){
		mal.rotategraph(e.getPoint());
	}
	repaint();
}

public void mousePressed(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

public void mouseReleased(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}


public void mouseEntered(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

public void mouseExited(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}


public void mouseMoved(MouseEvent arg0) {
	// TODO Auto-generated method stub
	
}

}
und die malende classe.
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.geom.*;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JComponent;

public class HandDrawit extends JComponent{
	Graphics2D g2d;
	ArrayList rectPunkte = new ArrayList();
	double rectx=210;
	double recty=210;
	double rectWidth=80;
	double rectHeight=60;
	
	
	double theta;
	Rectangle.Double rechteck = new Rectangle2D.Double(rectx,recty,rectWidth,rectHeight);
	
	
		public void paintComponent(Graphics g){
			g2d = (Graphics2D) g;
			g2d.setColor(Color.GREEN);
			Iterator zaehler2 = rectPunkte.iterator();
	         while (zaehler2.hasNext())
	         {
	         	g2d.setColor(Color.GREEN);
	         Point punktrect = (Point) zaehler2.next();
	         rectx = punktrect.x;
	         recty = punktrect.y;
	         rechteck = new Rectangle2D.Double(rectx,recty,rectWidth,rectHeight);
	         g2d.draw(rechteck);
	         }
			
			
			g2d.draw(rechteck);
			AffineTransform as = AffineTransform.getRotateInstance(theta,rechteck.getCenterX(), rechteck.getCenterY());
			g2d.setTransform(as);
			g2d.draw(rechteck);			         
		}
		
	         	


public void rotategraph (Point p){
	theta =  - Math.atan2(p.x - rechteck.getCenterX(), p.y-rechteck.getCenterY());	
		repaint();
	    
}
public void getRectPoint(Point punkt){
 	rectPunkte.add(punkt);
 	repaint();
 }


}
 

Wildcard

Top Contributor
Code:
public void paintComponent(Graphics g){ 
        //hier einfügen super.paintComponent(g);
         g2d = (Graphics2D) g; 
         g2d.setColor(Color.GREEN); 
         Iterator zaehler2 = rectPunkte.iterator(); 
            while (zaehler2.hasNext()) 
            { 
               g2d.setColor(Color.GREEN); 
            Point punktrect = (Point) zaehler2.next(); 
            rectx = punktrect.x; 
            recty = punktrect.y; 
            rechteck = new Rectangle2D.Double(rectx,recty,rectWidth,rectHeight); 
            g2d.draw(rechteck); 
            } 
          
          
         g2d.draw(rechteck); 
         AffineTransform as = AffineTransform.getRotateInstance(theta,rechteck.getCenterX(), rechteck.getCenterY()); 
         g2d.setTransform(as); 
         g2d.draw(rechteck);                   
      }
 

raffnix

Bekanntes Mitglied
Richtig . ganz vergessen.
allerdings hilft das meinem Problem nicht weiter.
trotzdem danke für den "Hint". :wink:
 

Wildcard

Top Contributor
Dachte das Rechteck ist nur doppelt weil du nicht super.paintComponent() aufrufst, aber du zeichnest ja wirklich 2 Rechtecke:
Code:
         g2d.draw(rechteck); 
         AffineTransform as = AffineTransform.getRotateInstance(theta,rechteck.getCenterX(), rechteck.getCenterY()); 
         g2d.setTransform(as); 
         g2d.draw(rechteck);
mach das erste mal weg
 

raffnix

Bekanntes Mitglied
ich möchte auch 2 mal zeichnen.
das erste ist nur da, damit ich sehe ob die koordinaten verschoben sind(durch die Buttons) oder nicht.
wenn du die zeile :
getContentPane().add(buttonleiste, BorderLayout.NORTH);

auskommentierst. siehst du das EIN rechteck erscheint.
das ist das erste draw(rechteck).
wenn ich es entferne ist das Problem scheinbar gelöst aber halt nur scheinbar.
der Zeichen bereich bleibt gestaucht und ärgert meine AffineTransfom.
 

Wildcard

Top Contributor
Code:
      public void paintComponent(Graphics g){ 
         g2d = (Graphics2D) g; 
         g2d.setColor(Color.GREEN);        
         g2d.draw(rechteck); 
  		 g2d.rotate(theta,rechteck.getCenterX(), rechteck.getCenterY());
         g2d.draw(rechteck);                   
      }
 

raffnix

Bekanntes Mitglied
Ja das meinte ich.

Code:
public void paintComponent(Graphics g){
         g2d = (Graphics2D) g;
         g2d.setColor(Color.GREEN);       
        // g2d.draw(rechteck);
         g2d.rotate(theta,rechteck.getCenterX(), rechteck.getCenterY());
         g2d.draw(rechteck);                   
      }

Ich habe es zur kontrolle eingefügt.
wenn ich es so auskommentiere. sieht es super aus . hast recht.
Nun drehe ich das rechteck. und es flackert beim drehen ein weiteres auf.
das flackernde bleibt zwar nicht, ist aber um den bereich der Buttons verschoben.
um der Sache auf den Grund zu gehen fügte ich die Zeile(g2d.draw(rechteck)) ein.
und siehe da . Mein Koordinatensystem wird durch die Buttons geändert.
 

Wildcard

Top Contributor
Also bei mir flackert da nichts, und die Koordinaten stimmen auch.
Natürlich wird das Koordinatensystem geändert, das sind ja alles Koordinaten relativ zum Ursprung deines Panels, aber das ist ja auch ok...
 

raffnix

Bekanntes Mitglied
Bei dir flackert nix???? :shock:
öhh. hmmmm.
?????
bei mir ja. Hast du noch irgendwas geändert???
 

Wildcard

Top Contributor
nicht wirklich:
Code:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;

import javax.swing.JComponent;

public class HandDrawit extends JComponent
{

	ArrayList rectPunkte = new ArrayList();

	double rectx = 210;

	double recty = 210;

	double rectWidth = 80;

	double rectHeight = 60;

	double theta;

	Rectangle.Double rechteck = new Rectangle2D.Double(rectx, recty, rectWidth,
			rectHeight);

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		g2d.setColor(Color.GREEN);
		g2d.draw(rechteck);
		g2d.rotate(theta, rechteck.getCenterX(), rechteck.getCenterY());
		g2d.draw(rechteck);
	}

	public void rotategraph(Point p)
	{

		theta = -Math.atan2(p.x - rechteck.getCenterX(), p.y
				- rechteck.getCenterY());
		repaint();

	}

	public void getRectPoint(Point punkt)
	{
		rectPunkte.add(punkt);
		repaint();
	}

}
 

raffnix

Bekanntes Mitglied
naja . dann liegt es wohl an der hardware.
Vielen dank für die nette Hilfe.
ich denke mal, das Problem ist so gelöst
.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen Optisch JPanel BorderLayout vertikaler Rand dicker als horizontaler Rand Java Basics - Anfänger-Themen 4
M BorderLayout, 2Panels, EAST wird nicht angezeigt ?? Java Basics - Anfänger-Themen 2
I In der Mitte eines Frames mit BorderLayout etwas malen Java Basics - Anfänger-Themen 7
F Content Pane / BorderLayout Java Basics - Anfänger-Themen 2
B Drawline mit Borderlayout Java Basics - Anfänger-Themen 3
G Konstruktor, BorderLayout nimmt Component nicht auf Java Basics - Anfänger-Themen 2
A Taschenrechner-GUI mit BorderLayout? Java Basics - Anfänger-Themen 6
M BorderLayout zickt! Ein Panel versteckt das andere! Java Basics - Anfänger-Themen 6
M JPanel, JButtons, Borderlayout Java Basics - Anfänger-Themen 8
P BorderLayout Java Basics - Anfänger-Themen 11
O AWT, Dubiose Ausgabe BorderLayout Java Basics - Anfänger-Themen 2
Antoras Layoutprobleme mit Box- und BorderLayout Java Basics - Anfänger-Themen 13
Spin Borderlayout Java Basics - Anfänger-Themen 4
A Problem mit BorderLayout und null-Layout Java Basics - Anfänger-Themen 5
G Frage zum BorderLayout Java Basics - Anfänger-Themen 2
kulturfenster BorderLayout Java Basics - Anfänger-Themen 3
G aktueller Panel, der in BorderLayout.SOUTH angeordnet ist Java Basics - Anfänger-Themen 11
S Button und BorderLayout Java Basics - Anfänger-Themen 2
P BorderLayout und Center fkt. nicht Java Basics - Anfänger-Themen 4
F Kurze Frage: JLabel in BorderLayout einfügen Java Basics - Anfänger-Themen 2
S BorderLayout Ausrichtung Java Basics - Anfänger-Themen 7
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
ohneInformatik; For Schleife. Was macht dieser Code?? Java Basics - Anfänger-Themen 5
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
berserkerdq2 Warum macht man in IJVM am Anfang Bipush 0? Java Basics - Anfänger-Themen 1
S Was macht ++ ohne Schleife? Java Basics - Anfänger-Themen 4
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
K Gleitkommazahl macht man 0 punkt matisse oder 1 punkt matisse Java Basics - Anfänger-Themen 2
B Methoden warum macht die Methode nicht das was ich erwarte? Java Basics - Anfänger-Themen 2
E Macht Java Rechenfehler beim Potenzieren und Mod? Java Basics - Anfänger-Themen 5
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
N Was macht die Klasse? Java Basics - Anfänger-Themen 3
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
R getUserProperties() macht für mich keinen Sinn Java Basics - Anfänger-Themen 8
L Was genau macht -> Java Basics - Anfänger-Themen 18
J Was genau macht die Methode close() im InputStream? Java Basics - Anfänger-Themen 5
U Best Practice Fehleranalyse, welche Fehler macht Ihr beim Lernen bzw. auch später Java Basics - Anfänger-Themen 12
L Hilfe! Was macht dieser Code? Java Basics - Anfänger-Themen 1
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
M Was macht super (...)? Java Basics - Anfänger-Themen 1
Tommy135 Klassen jComboBox macht nicht was sie soll Java Basics - Anfänger-Themen 4
J JButton macht was er will Java Basics - Anfänger-Themen 3
R While-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 24
JavaNewbie2.0 Habe ein frage wie man etwas macht. Java Basics - Anfänger-Themen 13
B Was macht diese Methode? Java Basics - Anfänger-Themen 9
P Was macht diese methode Java Basics - Anfänger-Themen 2
Tacofan Was macht dieses "Stückchen Code"? Java Basics - Anfänger-Themen 3
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
C Hilfe - Kleines Programm macht mir Schwierigkeiten Java Basics - Anfänger-Themen 2
G Methoden Was genau macht die Methode light.setInfluencingBounds ? Java Basics - Anfänger-Themen 5
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
D Methoden Filewriter macht keine Zeilenumbrüche Java Basics - Anfänger-Themen 3
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
H Tastatur.wurdeGedrueckt() macht nicht das, was ich will :/ Java Basics - Anfänger-Themen 2
K Was macht hier genau return? Java Basics - Anfänger-Themen 2
E Einfache For-Schleife macht nicht was sie soll Java Basics - Anfänger-Themen 2
J Shakersort, das Array macht Probleme! Java Basics - Anfänger-Themen 4
A scan.nextLine() - Wenn man zu lange nichts macht, soll etwas passieren Java Basics - Anfänger-Themen 3
C Scrollpanel autoscroll(false) macht nix Java Basics - Anfänger-Themen 2
M StringTokenizer macht Quatsch Java Basics - Anfänger-Themen 21
N Papaklasse macht Zicken mit Parameterkonstruktor Java Basics - Anfänger-Themen 7
K Datentypen double x als Bruch aus Integern macht x zu integer? Java Basics - Anfänger-Themen 3
C Erste Schritte was macht eigentlich "for (;;)" Java Basics - Anfänger-Themen 7
C JDK-Installer macht nichts Java Basics - Anfänger-Themen 11
A JApplet: einbinden von weiteren Jars macht Probleme Java Basics - Anfänger-Themen 2
B Variablen Wie macht man eine call by reference mit primitiven Datentypen in Java? Java Basics - Anfänger-Themen 2
I Für was macht man "deep Kopien" Java Basics - Anfänger-Themen 4
S Erste Schritte While do Schleife - macht nicht was sie soll Java Basics - Anfänger-Themen 7
9 Programm macht nicht was es soll Java Basics - Anfänger-Themen 6
H Was macht diese Methode? Java Basics - Anfänger-Themen 3
S JApplet macht Probleme Java Basics - Anfänger-Themen 2
Y Was macht folgende Regular Expression Java Basics - Anfänger-Themen 2
M Was macht bzw. was bringt ein constructor? Java Basics - Anfänger-Themen 12
P orphaned case macht probs Java Basics - Anfänger-Themen 3
ruutaiokwu System.err.print(ln) macht ein durcheinander??! Java Basics - Anfänger-Themen 8
X Selectionsort macht Probleme Java Basics - Anfänger-Themen 2
P was macht der code? Java Basics - Anfänger-Themen 4
M OOP for Schleife macht mir Probleme mit Arrays Java Basics - Anfänger-Themen 7
R Was macht...? Java Basics - Anfänger-Themen 4
alderwaran closed source jar, kein javadoc. was macht methode x eigentlich? ( oracle forms pjc beans ) Java Basics - Anfänger-Themen 2
M JavaEditor macht Probleme! Invalid Flag! Java Basics - Anfänger-Themen 9
P Was macht dieser Source code? Java Basics - Anfänger-Themen 5
R BufferedWriter macht komische Zeichen Java Basics - Anfänger-Themen 3
I KeyEvent macht nichts.^^ Java Basics - Anfänger-Themen 3
E new File macht den Pfad kaputt Java Basics - Anfänger-Themen 15
S Wie macht man sowas?? Ist da ne If-Schleife richtig?? Java Basics - Anfänger-Themen 22
Pithecanthropus Thread anhalten, der aber ein readObject() macht. Java Basics - Anfänger-Themen 4
T aufruf methode in methode macht probleme Java Basics - Anfänger-Themen 9
I Was macht diese Funktion? Java Basics - Anfänger-Themen 4
0 Was macht eine IOException? Java Basics - Anfänger-Themen 4
0 Was ist ein GregorianCalender?(Was macht es etc.) Java Basics - Anfänger-Themen 2
T Calender / DateFormat macht plus ein Monat Java Basics - Anfänger-Themen 3
T "x hoch y" macht nur "x mal x"^^ Java Basics - Anfänger-Themen 3
M Objektorientierung - wie macht man's richtig? Java Basics - Anfänger-Themen 3
A Macht es Sinn Arraylisten mit Gettern zu übergeben? Java Basics - Anfänger-Themen 19
M JPanel und JTabbedPane macht probleme Java Basics - Anfänger-Themen 5
S Formatierter String macht Probleme Java Basics - Anfänger-Themen 9
G JComboBox macht Probleme Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben