aus Container components paint

nadinhud

Mitglied
Hallo allwissendes Java-Forum, welches mir bis jetzt auf alle Java Fragen eine Antwort wusste :) ....
ich bin ein blutiger Anfänger, welcher Spaßeshalber sich dieses Hobby gefunden hat.

nun zu meinem Problem, ehe eine Verständnis-frage, da sogar mit der kompliziertesten Lösung das Ziel erreicht werden kann:
Es geht um Container und den darin enthaltenen Component´s, welche gezeichnet durch paint() werden.
Im Ansatz habe ich den JComponent als Container welcher wiederum JComponent aufnimmt. als letzte Stufe ist das Canvas angelegt, welche die Position und das zu zeichnete Objekt darstellt. (Frage: ist es so richtig, da doch Canvas ein awt-Element ist und JComponent zu Swing gehört?). nun gehe ich auf den MouseListener und versuche über die SwingUtilities.getDeepestComponentAt() die Componente auf dieser Position rauszugeben, was leider nicht funktioniert, weil das Objekt ContainerObjektA kein Component von awt ist (Frage: in Component kann ich keine Components adden, also wieso sollte ich dann den Component verwendet? und wie kann ich die Componente nach Position automatisch suchen lassen?) . Gezeichnet wird das Objekt als Canvas, welcher hier von JPanel nach unten mit paint() und while Suche angesteuert wird (Frage: Warum wird Component nicht von selbst gezeichnet, also warum muss es manuell angesprochen werden?).

So nun zu der Hauptfrage: als blutiger Anfänger, der ich bin, werde ich einfach den Gedanken nicht los das diese paint Component über Container einfacher gestaltet wird, existierende Bibliotheken, Objekte...? Gibt es wirklich nur die Lösung über die Layout mit JPanel, welche weitere in sich beinhaltende JPanels aufnimmt und diese auf Position setzt, dann geht auch die SwingUtilities.getDeepestComponentAt() Methode, ToolTip usw, oder ist das unten stehende Beispiel so valide, OK, inordnung???

Also wie Ihr sehen könnt ist mein Problem die Verständnis von JComponent, Component, Canvas, JPanel mit MouseListener (Benutzerinteraktion) und Runnable. Also äußert bitte eure Erfahrung, Meinung...ich freue mich über jeden Einwand und jede neue Erkenntnis :) Vielen Dank

und nu der Code:
Java:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.PopupMenu;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;



public class Ausgabe extends JFrame {
	/**
	 * Main
	 * @param args
	 */
 public static void main(String[] args) {
  Ausgabe t = new Ausgabe(); 
  t.pack();
  t.setVisible(true);
 }
/**
 * JFrame für Start
 */
 public Ausgabe() {
  this.setSize(100,100);
  setLayout(new BorderLayout());
  addWindowListener(new ExitListener());
  add(new Container0(),BorderLayout.CENTER);
 }
}

/**
 * Container für alle Objekte
 *
 */
class Container0  extends JPanel implements Runnable{
	JComponent componenteA;
	 public Container0(){
		 setPreferredSize(new Dimension(100, 100));
		 componenteA = new ContainerObjektA();
		 componenteA.setVisible(true); 
		 add(componenteA); 
		 addMouseListener(new MouseL());
	 }
	 public void paint(Graphics g){
		super.paint(g);
		g.setColor(Color.red);
		g.fillRect(this.getX(), this.getY(), this.getWidth(), this.getHeight());

		 Component[] gt =this.getComponents();
		 int i= 0;
		 while (i< gt.length){
			 gt[i].paint(g);
			 i++;
		 }
		 System.out.println("Test Übergeordneter Container");
	 }
	@Override
	public void run() {
		// TODO Auto-generated method stub
		System.out.println("RUN nicht verwendet");
	}
	 
	
}
/**
 * Container für gleichartige positionsverschiedene Objekte
 *
 */
class ContainerObjektA  extends JComponent{
	Componente componenteA0;
	Componente componenteA1;
	 public ContainerObjektA (){
		 setPreferredSize(new Dimension(100, 100));
		 componenteA0 = new Componente();
		 componenteA1 = new Componente(20,40);
		 componenteA0.setVisible(true);
		 componenteA1.setVisible(true);	 
		 add(componenteA0); 
		 add(componenteA1);
	 }
	 public void paint(Graphics g){
		 Component[] gt =this.getComponents();
		 int i= 0;
		 while (i< gt.length){
			 gt[i].paint(g);
			 i++; 
		 }
		 System.out.println("Test Container");
	 }
	 
	
}
/**
 * Objekt selbs, mit paint-Eigenschafen
 *
 */
class Componente extends Canvas {
	private int width=10;
	private int height=10;
	private int x=10;
	private int y=10;
	public Componente(){
		super();	     
		add( new PopupMenu("test"));
		setLocation(x, y);
		setBackground(Color.GREEN);
		contains(x, y);	
	}
	public Componente(int f, int g){
		setBackground(Color.blue);
		setLocation(f, g);
		contains(f, g);
	}
	@Override
	public void paint(Graphics g){
		System.out.println("Test Objekt: " + getLocation());
		g.setColor(getBackground());
		g.fillRect( getLocation().x,  getLocation().y, width, height);
		
	}
}
/**
 * Mauslistener für den Container mit allen Objekten
 *
 */
class MouseL implements MouseListener {
	@Override
	public void mouseClicked(MouseEvent e) {
	}
	@Override
	public void mousePressed(MouseEvent e) {
		Component c = SwingUtilities.getDeepestComponentAt(
                e.getComponent(), e.getX(), e.getY());
		System.out.println("get Component: " + c);
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
	}
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
	}
}
/**
 * 
 *  Exitlistener für Fenster
 */
class ExitListener extends WindowAdapter {
	  public void windowClosing(WindowEvent event) {
		  System.exit(0);
	  }
	}
 

Kevin94

Top Contributor
Ich klapper mal die Fragen nacheinander ab, und mein Kommentar zum Schluss:
nadinhud hat gesagt.:
Ist es so richtig, da doch Canvas ein awt-Element ist und JComponent zu Swing gehört?
Nein, man sollte tunlichst vermeiden AWT und Swing zu mischen. Ich hatte in 3 Jahren Hobbyprogrammierung keinen Fall, in dem ich das auch nur ansatzweiße nötig war. Swing reicht i.d.R. alleine volkommen aus.
nadinhud hat gesagt.:
In Component kann ich keine Components adden, also wieso sollte ich dann den Component verwendet? und wie kann ich die Componente nach Position automatisch suchen lassen?
Component bzw. JComponent ist eine Oberklasse für alle AWT bzw. Swing-Elemente, es wird nicht direkt sondern nur als Oberklasse verwendet. Ich hab JComponent bisher nur verwendet, wenn ich eine wirklich neue Componente programmiert hab, wie die Zeichenfläche eines Spiels.
nadinhud hat gesagt.:
Warum wird Component nicht von selbst gezeichnet, also warum muss es manuell angesprochen werden?
Component wird automatisch gezeichnet? Oder rufst du irgendwo paint auf? Ich vermute mal du willst darauf hinaus warum du alle paint-Methoden selber ausprogrammiert hasst. Dazu kann ich nur sagen: Viele Anfänger (ich in den ersten Wochen auch) kennen die API nicht ausreichend, und dann kommt Code raus zu dem die anderen (man selbst nach einigen Wochen auch) sagen: "Warum einfach, wenn's auch kompliziert geht."
Zur Hauptfrage: Les dir mal ein ausführliches Swing-Tutorial (und nur Swing) durch. Valide ist es, im Sinne es kompiliert. In Ordnung ist es auf keinen Fall, es ist grausam.

Ich fass mal deinen Code so zusammen, wie ichs schreiben würde.

Java:
public class TestClass {
 public static void main(String[] args) {
  JFrame t = new JFrame("Irgend ein Titel"); 
  t.setSize(100,100);
  t.setLayout(new BorderLayout());
  t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Anstatt dem WindowListener
  JPanel container0=new JPanel(null); //null-Layout is evil!!! Only for demonstration.
  container0.setPreferredSize(new Dimension(100, 100));
  JComponent tmp;
  container0.add(tmp=new Componente());
  //das wolltest du vermutlich mit dem PopupMenu:
  tmp.addMouseListener(new PopupListener());
  container0.add(tmp=new Componente(20,40));
  tmp.addMouseListener(new PopupListener());
  container0.addMouseListener(new MouseAdapter(){
      public void mousePressed(MouseEvent e) {
          Component c = SwingUtilities.getDeepestComponentAt(
                  e.getComponent(), e.getX(), e.getY());
          System.out.println("get Component: " + c);
      }
  });
  container0.setBackground(Color.RED);
  
  t.add(container0,BorderLayout.CENTER);
  t.pack();
  t.setVisible(true);
 }
}

//Aus dem dem Oracle Tut geklaut:
//Ich hoffe mal das wolltest du in Componente erreichen
class PopupListener extends MouseAdapter
{
    private JPopupMenu m=new JPopupMenu("test");
    
    public PopupListener()
    {
        m.add(new JMenuItem("test2"));
    }
    
    public void mousePressed(MouseEvent e) {
        maybeShowPopup(e);
    }

    public void mouseReleased(MouseEvent e) {
        maybeShowPopup(e);
    }

    private void maybeShowPopup(MouseEvent e) {
        if (e.isPopupTrigger()) {
            m.show(e.getComponent(),e.getX(), e.getY());
        }
    }
}

// müsste man eingentlich auch nicht überschreiben, geht auch nur mit setSize,setLocation und setBackground
class Componente extends JComponent {
    private static final int DEFAULT_X=10;
    private static final int DEFAULT_Y=10;

    private static final int DEFAULT_WIDTH=10;
    private static final int DEFAULT_HEIGHT=10;
    
    public Componente(){
        this(DEFAULT_X,DEFAULT_Y);
        //add( new PopupMenu("test")); k.A. was du damit willst, das funktioniert nicht.
        setBackground(Color.GREEN);
    }
    public Componente(int x, int y){
        setLocation(x, y);
        setBackground(Color.blue);
        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
    }
    public void paintComponent(Graphics g){
        super.paintComponent();
        System.out.println("Test Objekt: " + getLocation());
        g.setColor(getBackground());
        g.fillRect( 0,  0, getWidth(), getHeight());
    }
}

ContainerObjectA hab ich komplett weggelassen, weil es nicht benötigt wird, Container0 ist das JPanel inner und deinen MouseListener hab ich als anonyme Klasse implementiert, auserdem hab ich noch eine Klasse für das öffnen eines PopupMenus eingefügt, ich hoffe mal das ist was du wolltest. Das null-Layout sollte man eigentlich nicht verwenden, aber das ist der schnellste/einfachste Weg zwei Components willkürlich zu positionieren.
 

nadinhud

Mitglied
Hallo,
@Kevin, danke für deine Antwort.
ich habe deinen Code für Testzwecke weiter ausgebaut
...also an alle....ist es so korrekt, würdet ihr es auch so machen??? (Schreibweise der Variablen, Aufrufkette und halt alles was euch noch so einfällt) Mir kommt es vor, dass ich zu viele Listener verwende...Auch dem JPanel(Layout = null) nutze ich noch weiter, da wenn ich den Layer setze, die Objekte nicht so schön fire verschiebbar sind.

Nun zu einem Punkt wo ich wieder ein bischen mich Frage, ob der Weg, denn ich einschlagen will, der Richtige ist:
Was will ich Abbilden:
1.) Aus dem Punkt soll eine Sonne werden, Striche an die runde Scheibe. Diese Striche sollen den Punkt kennen, allerdings auch auf den Mouselistener und den anderen Zeug (verscheiben usw.) mit dem Benutzer agieren. Es kann Passieren, dass die Sonnenstrahlen sich auch durch die Aneinanderreihung von verschiedenen Sonnen bzw. untereinander, überschneiden.
Jetzige Umsetzungsstrategien : JPanel zeichnet "Punkt". Manuell geht JPanel dann die paintStrich in "Punkt" durch und ruft die Componenten "Strich" als PaintT auf. Das funktioniert net... zwar gebe ich zu paintT meth die Graphics mit, damit es die Deminsion des JPanels hat, aber es wird nicht gezeichnet. Wenn es sogar gezeichnet wurden wäre, glaub ich, kann ich diese nicht als JComponent, mit als den schönen Listener, benutzen.
2.) Hab mir auch Überlegt diese als Strich in JPanel als JComponent zu übernehmen und in Strich den Punkt und in Punkt die Striche speichern, und diese durch die Koordinatenabhängigkeit zu setzen. Glaube sogar dies wäre die richtigere Methode.
3.) in 2D Game tutorial werden die Stiche in ArayList gespeichert. Wäre auch eine Möglichkeit, würde aber bedeuten, dass ich die Listener des JPanels mit absuchen nach Koordinaten, während der Positionierung und Änderungen durch den Benutzer auswählen müsste.
Aber nun ja, bevor ich mir diese Arbeit mache, hätte ich sehr gerne Gewust, ob es so richtig ist.
Vielen Dank
Java:
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.MenuComponent;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;

public class TestClass {
	private static JComponent PupUpStrich = null;
	 public static void main(String[] args) {
  JFrame t = new JFrame("Beispiel JComponent"); 
  t.setSize(100,100);
  t.setLayout(new BorderLayout());
  t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  JPanel container0=new Panel();  
  t.add(container0,BorderLayout.CENTER);
 /* JButton Start = new JButton("Start");//start move des Obejktes entlang des Striches mit geschwindigkeit v
  JButton Stop = new JButton("Stop");//animation stop
  JPanel Button = new JPanel();
  Button.setLayout(new GridLayout());
  Button.add(Start);
  Button.add(Stop);
  t.add(Button,BorderLayout.SOUTH);*/
  t.pack();
  t.setVisible(true);
	 }
	 /**
	 * 
	 * @return Objekt, an welchen der Strich hinzugefügt wird
	 */
		public static JComponent getPupUpStrich() {
			return PupUpStrich;
		}
	/**
	 * für Abfrage bei Mouse Listener des Hauptfensters, wenn gesetzt, erzeuge keine Gruppierung
	 * @param pupUpStrich
	 */
		public static void setPupUpStrich(JComponent pupUpStrich) {
			PupUpStrich = pupUpStrich;
		}
}

class Panel extends JPanel  implements Runnable{
	 public Panel(){
		 setLayout(null);
		 setName("test");
		  setPreferredSize(new Dimension(100, 100));
		  JComponent tmp;
		  add(tmp=new Objekt_Component());
		  tmp.setName("obj1");
		  ((Objekt_Component) tmp).setRechteck(false);
		  tmp.setToolTipText(tmp.getName());
		  tmp.addMouseListener(new PopupListener(tmp));
		  add(tmp=new Objekt_Component(20,40));
		  tmp.setName("obj2");
		  ((Objekt_Component) tmp).setRechteck(false);
		  tmp.setToolTipText(tmp.getName());
		  tmp.addMouseListener(new PopupListener(tmp));
		  addMouseListener(new MouseC0());
		  setBackground(Color.RED); 
	 }
		private Image dbImage;
		private Graphics dbGraphics;
	    protected void paintComponent( Graphics g ){
			this.setPreferredSize(new Dimension(this.getParent().getSize().width, this.getParent().getSize().height));		 
	    	Graphics gt = g;
	//		if (dbImage == null) {
				 dbImage = createImage(
						 this.getParent().getSize().width,
						 this.getParent().getSize().height
						 );
				 dbGraphics = dbImage.getGraphics();
		//	 }
			 //Hintergrund l�schen
			 dbGraphics.setColor(getBackground());
			 dbGraphics.fillRect(
					 0,
					 0,
					 this.getParent().getSize().width,
					 this.getParent().getSize().height
					 );
			 dbGraphics.setColor(getForeground()); 
			 super.paintComponent(dbGraphics);
			 //Offscreen anzeigen
			 g.drawImage(dbImage,0,0,this);
		 }
		@Override
		public void run() {
			// TODO Auto-generated method stub
			repaint();
		} 
		private void paintStrich(Graphics g){
			int i =0;
			while(this.getComponentCount() > i){
				((Objekt_Component) this.getComponent(i)).paintStrich(g);
			}
		}
}
/**
 * 
 * Mouselistener des Hauptfensters
 *
 */
class MouseC0  implements  MouseListener{
	private  int posX = -1;
	private  int posY = -1;
	private JComponent Markierung = null;
	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
	@Override
	public void mousePressed(MouseEvent e) {
		if (e.getButton() == 1 ){
			// TODO Auto-generated method stub
			Component c = SwingUtilities.getDeepestComponentAt(
	                e.getComponent(), e.getX(), e.getY());
			posX = e.getX();
			posY = e.getY();
		}
	}
	@Override
	public void mouseReleased(MouseEvent e) {
		if (e.getButton() == 1 ){
			if (Markierung == null && TestClass.getPupUpStrich() == null){
				if (posX != -1){
					int pos2x= 0;
					int pos2y= 0;
					if (e.getX() < posX){
						pos2x = posX;
						posX = e.getX();
					}
					else {
						pos2x = e.getX();
					}
					if (e.getY() < posY){
						pos2y = posY;
						posY = e.getY();
					}
					else {
						pos2y = e.getY();
					}
					if (e.getComponent()!= null){
						JComponent c0 = (JComponent) e.getComponent();
						if (c0.getComponents().length > 0){
							JComponent cSpeicher = new JComponent() {
										};
							int i = 0;
							Component cv = null;
							 while (i< c0.getComponents().length){
								 cv = c0.getComponent(i);
								 if (cv != null){
									 if (cv.getX()> posX && cv.getX()<pos2x &&
											 cv.getY()> posY && cv.getY()<pos2y ){								 
										 JComponent cVerschieben = (JComponent) cv;
										 cSpeicher.add(cVerschieben);
										 c0.remove(cVerschieben);
										 i--;
									 }
								 }
								 i++; 
							 }
							 if (cSpeicher.getComponents().length> 1 ){
								 if (Markierung == null){
									 Markierung = new Objekt_Component(posX,posY);
									 Markierung.setSize(pos2x-posX, pos2y-posY);
									 Markierung.setName("Markierung");
									 
									i = 0;
									int gesl = cSpeicher.getComponents().length;
									while (i < gesl){
										JComponent cVerschieben = (JComponent) cSpeicher.getComponent(0);	
										cSpeicher.remove(cVerschieben);
										Markierung.add(cVerschieben);
										cVerschieben.setLocation(cVerschieben.getLocation().x-posX, cVerschieben.getLocation().y-posY);
										i++;
									}
									 Markierung.addMouseListener(new PopupListener(Markierung));
									 c0.add(Markierung);
									 ((Objekt_Component) Markierung).setFarbeObj(Color.gray);
									 Markierung.setVisible(true);
									 c0.repaint();
								 }
							 }
							 else {
								 i = 0;
								int gesl = cSpeicher.getComponents().length;
								while (i < gesl){
									JComponent cVerschieben = (JComponent) cSpeicher.getComponent(0);	
									cSpeicher.remove(cVerschieben);
									c0.add(cVerschieben);
									i++;
								} 
							 }
							 Markierung = null;
						}
					}
				}
			}
			else if (Markierung != null){
				Component c = SwingUtilities.getDeepestComponentAt(
			                e.getComponent(), e.getX(), e.getY());
				if (c != Markierung){
		        	Markierung.setLocation(Markierung.getLocation().x+e.getX(), Markierung.getLocation().y+e.getY());
		        	Markierung = null;
	        	}
			}
			else {//zeichne Strich
				
			}
		}
		e.getComponent().getParent().repaint();
	}
	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub		
	}
	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub		
	}
	
}
/**
 * 
 * Mouselistener des Objektes (Punkt)
 *
 */
class PopupListener  extends MouseAdapter 
{
	private JComponent obj = null; 
	private int posx = -1;
	private int posy = -1;
	public void setObj(JComponent c){
		obj = c;
	}
    private JPopupMenu m=new JPopupMenu("test");
    
    public PopupListener()
    {
    		m.add(new JMenuItem("leer"));
    }
    public PopupListener(JComponent c)
    {	
    	if (c.getClass().getSimpleName().toString().equals("Objekt_Component") && c.getName().equals("Markierung")!=true){
    			
    		//obj
    		JMenuItem m1 = new JMenuItem("Hinzufügen Strich");
    		JMenuItem m2 = new JMenuItem("Entfernen Strich");
    		m1.addActionListener(new PupUpListener(c));
    		m2.addActionListener( new PupUpListener(c) );
    		m.add(m1);
    		m.add(m2);
    	}
    	else if(c.getName().equals("Markierung")==true){
    		//Punkt
    		JMenuItem m0 = new JMenuItem("Entferne Gruppierung");
    		m0.addActionListener(new PupUpListener(c));
    		m.add(m0);
    	}
    	else {
    		//strich
    		
    	}
    }
    public void mousePressed(MouseEvent e) {
        maybeShowPopup(e);
        if (e.getComponent().getClass().getSimpleName().toString().equals("Objekt_Component") || e.getComponent().getName().equals("Markierung")){
        	obj = (JComponent) e.getComponent();
        }
        posx = e.getX();//merke Koordinate für Verschiebung auf dem Objekt
        posy = e.getY();
        
    }
 
    public void mouseReleased(MouseEvent e) {
        maybeShowPopup(e);
        Component c = SwingUtilities.getDeepestComponentAt(
                e.getComponent(), e.getX(), e.getY());
        if ( obj!= null){//Objekt zu verschiebung gespeichert
        	if (c != obj){//wenn Position gleich der Ponktposition ist, erfolgt keine Verschiebung
	        	if (obj.getLocation().x+e.getX()-posx > e.getComponent().getParent().getWidth() || 
        				obj.getLocation().x+e.getX()-posx < 0 ||
        				obj.getLocation().y+e.getY()-posy > e.getComponent().getParent().getHeight() || 
        				obj.getLocation().y+e.getY()-posy < 0 ){
        			if (obj.getParent().getName().equals("Markierung")== true){
        				JComponent gt = obj;
        				JComponent gtMar = (JComponent) obj.getParent();
        				JComponent gt0 = (JComponent) obj.getParent().getParent();
        				gtMar.remove(obj);
        				gt0.add(gt);
        				gt.setLocation(gtMar.getX()+gt.getX()+e.getX()-posx, gtMar.getY()+ gt.getY()+e.getY()-posy);
        				if (gtMar.getComponents().length > 0){
        				}
        				else {
        					gt0.remove(gtMar);
        				}
        			}
        			else {
        				obj.move(obj.getLocation().x+e.getX()-posx, obj.getLocation().y+e.getY()-posy);
        			}
        		}
	        	else {
	        	obj.move(obj.getLocation().x+e.getX()-posx, obj.getLocation().y+e.getY()-posy);
	        	}
        	}
        	else if (c.getName().equals("Markierung")== true){//durch die Größe der manuel erstellten Objektgruppierung = Markierung ist eine verschiebung im Objekt möglich
        			obj.move(obj.getLocation().x+e.getX()-posx, obj.getLocation().y+e.getY()-posy);  	
        	}
        	obj = null;
        	e.getComponent().getParent().getParent().repaint();
        }
        e.getComponent().getParent().repaint();
    }
 
    private void maybeShowPopup(MouseEvent e) {
        if (e.isPopupTrigger()) {
            m.show(e.getComponent(),e.getX(), e.getY());
        }
    }
    
}
/**
 * 
 * Actionlistener des Objektes bzw der Grupierung
 * aufruf duch den MouseListener  "PopupListener" des Objektes
 *
 */
class PupUpListener implements ActionListener{
	private JComponent Obj = null;
	public PupUpListener(JComponent c){
		Obj= c;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		if (e.getActionCommand().equals("Hinzufügen Strich")==true){
			//Erzeuge Strich
		//	TestClass.setPupUpStrich(Obj);
		}
		else if (e.getActionCommand().equals("Entfernen Strich")==true){
			//entferne Strich
			//Obj.remove(Obj.getComponents().length);
		}
		else if (e.getActionCommand().equals("Entferne Gruppierung")==true){
			JComponent obj0 = (JComponent) Obj.getParent();
			int i = 0;
			int gesl = Obj.getComponents().length;
			while (i < gesl){
				JComponent cVerschieben = (JComponent) Obj.getComponent(0);				
				Obj.remove(cVerschieben);
				obj0.add(cVerschieben);
				cVerschieben.setLocation(Obj.getX()+cVerschieben.getX(), Obj.getY()+ cVerschieben.getY());
				i++;
			}
			obj0.remove(Obj);
			obj0.repaint();
		}
		else {
			System.out.println("nicht deffiniert");
		}
	}

	
}
/**
 * 
 * Objekt selbst 
 *
 */
class Objekt_Component extends JComponent {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private static final int DEFAULT_X=10;
    private static final int DEFAULT_Y=10;
    private Color FarbeObj = null;
    private static final int DEFAULT_WIDTH=10;
    private static final int DEFAULT_HEIGHT=10;
    private  int Vobj = 1;
    private boolean Rechteck = true;
    //Construktor
    public Objekt_Component(){
        this(DEFAULT_X,DEFAULT_Y);
        FarbeObj = Color.green;
     //   setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
        Vobj = 2;
        Strich gt;
        add(gt =new Strich());
        gt.setStartposition(0, 0);
        gt.setEndposition(10, 10);
        gt.setVisible(true);
    }
    public Objekt_Component(int x, int y){
        setLocation(x, y);
        FarbeObj = Color.blue;
        setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
        
    }
    //Component
    public void paintStrich(Graphics g){
    	int i = 0 ;
    	while (this.getComponentCount()> i){
    		((Strich) this.getComponent(i)).paintT(g);
    	}
    }
    //Eigenschaft
    public void setFarbeObj(Color c){
    	FarbeObj = c;
    }
    
    

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        System.out.println("Test Objekt: " + getLocation());
        g.setColor(FarbeObj);
        if (isRechteck()==false){
        	g.fillOval(0, 0,getWidth(),getHeight());
        }
        else {
        	g.fillRect(0, 0, getWidth(),getHeight());
        }
    }


	public boolean isRechteck() {
		return Rechteck;
	}


	public void setRechteck(boolean rechteck) {
		Rechteck = rechteck;
	}
   
}
/**
 * 
 *Strich länge bzw. weg des Objektes
 */
class Strich extends JComponent{
	private int XStart = 0;
	private int YStart = 0;
	private int XEnde = 0;
	private int YEnde = 0;
	public Strich(){
		setBackground(Color.orange);
	}
	public void setStartposition(int x, int y){
		XStart = x;
		YStart = y;
	}
	public void setEndposition(int x, int y){
		XEnde = x;
		YEnde = y;
	}
	public Point getStartPosition(){
		Point p = new Point(XStart, YStart);
		return p;
		
	}
	public Point getEndPosition(){
		Point p = new Point(XEnde, YEnde);
		return p;
	}
	public void paintT(Graphics g){
        super.paintComponent(g);
        System.out.println("Test Strich: " + getLocation());
        Graphics2D g2 = (Graphics2D) g;
        g2.setStroke(new BasicStroke(4));
        g.setColor(getBackground());
        g.drawLine(XStart, YStart, XEnde, YEnde);
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
H Zeichnung in Container Java Basics - Anfänger-Themen 8
J Container Java Basics - Anfänger-Themen 1
B Schleife über einen Container Java Basics - Anfänger-Themen 7
M GUI- mehrere Komponenten auf Container adden Java Basics - Anfänger-Themen 2
Q Container sinn? Java Basics - Anfänger-Themen 3
O Container Inhalt auslesen Java Basics - Anfänger-Themen 2
A Schnellster Container Java Basics - Anfänger-Themen 21
JAVAnnik Container erstellen Java Basics - Anfänger-Themen 19
N Container löschen?! Java Basics - Anfänger-Themen 3
F Container Objekt herausfinden Java Basics - Anfänger-Themen 15
M zwei JApplets in einem Container + GUI-Komponente Java Basics - Anfänger-Themen 12
D Container mit eigener Klasse Java Basics - Anfänger-Themen 5
H Container Probleme Java Basics - Anfänger-Themen 2
G Container für [key,value] elemente ? Java Basics - Anfänger-Themen 7
G unbound classpath container Java Basics - Anfänger-Themen 1
M Problem mit paint() und Container. Java Basics - Anfänger-Themen 8
C Container Java Basics - Anfänger-Themen 2
M Container Java Basics - Anfänger-Themen 2
H mehrere container Java Basics - Anfänger-Themen 2
L aufruf mit container -> ausgabe Java Basics - Anfänger-Themen 12
E Zweiten Container anlegen Java Basics - Anfänger-Themen 5
D alten Container wieder aufrufen Java Basics - Anfänger-Themen 11
G Größe vom Container abfragen. Java Basics - Anfänger-Themen 4
G Buttons listen - Probleme mit Container Java Basics - Anfänger-Themen 6
G Panel in Container einfügen Java Basics - Anfänger-Themen 7
D JTextField in einem Container, danach auslesen Java Basics - Anfänger-Themen 10
sambalmueslie Probleme mit Container und Komponenten. Java Basics - Anfänger-Themen 3
J Bilder auf Container oder alternativen Java Basics - Anfänger-Themen 2
A components im JFrame erst nach Größenänderung sichtbar? Java Basics - Anfänger-Themen 2
C Probleme bei Ermitteln der Größe eines Components Java Basics - Anfänger-Themen 5
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
S awt: paint Methode zeigt nichts an Java Basics - Anfänger-Themen 9
S Paint Anwendung: Freihandlinien zeichnen Java Basics - Anfänger-Themen 4
S Erste Schritte drawOval Problem in Paint Anwendung Java Basics - Anfänger-Themen 1
R Begrenzer Anzahl von paint() ? Java Basics - Anfänger-Themen 3
S KeyListener/ActionListener/paint()/repaint() Java Basics - Anfänger-Themen 3
thet1983 start & paint Methode? Java Basics - Anfänger-Themen 0
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
M Probleme mit paint() aus java.awt.Graphics Java Basics - Anfänger-Themen 2
D Wert einer Variable in paint-Methode verwenden Java Basics - Anfänger-Themen 2
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
T Vererbung Wann wird die Methode paint aufgerufen? Java Basics - Anfänger-Themen 4
L Paint() wird scheinbar nicht richtig ausgeführt Java Basics - Anfänger-Themen 8
J paint() vs repaint() Java Basics - Anfänger-Themen 3
A Problem mit paint() Java Basics - Anfänger-Themen 2
A Aufruf der paint() Methode Java Basics - Anfänger-Themen 3
Dogge Problem mit paint(Graphics g) im Applet Java Basics - Anfänger-Themen 13
J Problem mit paint(Graphics g) Java Basics - Anfänger-Themen 4
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
T paint() wird nicht aufgerufen Java Basics - Anfänger-Themen 2
K paint() mit einfügen Java Basics - Anfänger-Themen 14
K doppeltes paint beim Drucken Java Basics - Anfänger-Themen 8
J paint-methode blockiert settings von JComponents Java Basics - Anfänger-Themen 5
F Eine Frage über paint() Funktion Java Basics - Anfänger-Themen 2
S [Applet] Objekte von init bei paint benutzen Java Basics - Anfänger-Themen 9
R Methoden Zeichnen auf Button-Druck durch Paint-Methode Java Basics - Anfänger-Themen 2
W repaint() ruft paint() nicht auf Java Basics - Anfänger-Themen 9
J Zweimal im gleichen Paint-Fenster malen Java Basics - Anfänger-Themen 8
A paint() methode von externer Klasse aufrufen Java Basics - Anfänger-Themen 3
J Paint Methode von JPanel aufrufen Java Basics - Anfänger-Themen 15
V paint funktioniert nicht Java Basics - Anfänger-Themen 14
Q Zeichnen außerhalb der paint-methode Java Basics - Anfänger-Themen 7
O Paint Programm mit Fehler Java Basics - Anfänger-Themen 2
A Methoden Variablen in paint methode Java Basics - Anfänger-Themen 4
K Problem mit Parameter von paint(Graphics g) Java Basics - Anfänger-Themen 3
Y im applet malen ohne repaint paint ? Java Basics - Anfänger-Themen 6
S Datentypen Paint Programm Java Basics - Anfänger-Themen 7
M paint-Methode funzt nicht Java Basics - Anfänger-Themen 11
L Paint zeichnet nicht gespeicherte Objekte Java Basics - Anfänger-Themen 3
D OOP paint() Methode aus Unterklasse anstoßen Java Basics - Anfänger-Themen 3
A paint() - warum nicht aufrufen? Java Basics - Anfänger-Themen 3
K Scrollbar - Bild - paint-Methode - zoom Java Basics - Anfänger-Themen 10
S super.paint() Java Basics - Anfänger-Themen 4
S Bild aus paint() Methode auslagern Java Basics - Anfänger-Themen 14
T Etwas an paint()-Methode übergeben? Java Basics - Anfänger-Themen 6
TheKing Paint-Methode aufrufen Java Basics - Anfänger-Themen 14
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
M Paint und JColorChooser Java Basics - Anfänger-Themen 12
G hintergrund wird nicht gezeichnet bei paint() Java Basics - Anfänger-Themen 3
H Paint Methode malt nicht im Panel Java Basics - Anfänger-Themen 4
S Frage zur paint-Methode Java Basics - Anfänger-Themen 3
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
G Nichtstatische Objekte in der paint()-Methode Java Basics - Anfänger-Themen 16
K Wieso wird "paint" nicht ausgeführt ? Java Basics - Anfänger-Themen 2
K JPanel, JFrame, paint() und wo ist mein Viereck ? Java Basics - Anfänger-Themen 19
F Frage zu JPanel und Paint Java Basics - Anfänger-Themen 5
P paint Methode Java Basics - Anfänger-Themen 3
B Paint(Component) und externe Objekte Java Basics - Anfänger-Themen 6
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
F Applets und die paint-Methode Java Basics - Anfänger-Themen 3
G frage zu paint Java Basics - Anfänger-Themen 3
T Mehrere paint Methoden in unterschiedlichen Klassen Java Basics - Anfänger-Themen 7
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
G Hilfe in paint() ; zeichnen Java Basics - Anfänger-Themen 15
C Einfaches Paint-Programm Java Basics - Anfänger-Themen 9
T .paint() aufrufen Java Basics - Anfänger-Themen 23
S Paint Teilweise Zeitverzögert Java Basics - Anfänger-Themen 6
R paint problem Java Basics - Anfänger-Themen 6
G mit paint() ins JPanel malen. Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben