Graphics Objekte in GUI

The_Answer1985

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine kleine GUI, die eine Graphics (erbt von Panel) Komponente enthält.Diese Grafikfläche soll sozusagen einen Laderaum darstellen, in der man Pakete abstellen kann und so eine Übersicht über den noch zur Verfügung stehenden Platz erhält.

Im Grunde soll es so ablaufen:
Per Klick auf den Button "Hinzufügen" wird eine Methode aufgerufen, die ein neues Grafik-Objekt erzeugt und auf der Ladefläche angezeigt.

Um die Ladefläche überhaupt erst einmal anzuzeigen benutze ich die Methode paint(Graphics g) und repaint().

Meine Frage nun: Wie kann ich ein neues Grafikobjekt erzeugen?

Würde ich direkt in der Methode paint(Graphics g) arbeiten, würde ich ein neues Rechteck folgendermaßen erzeugen:
g.draw3DRect(100, 40, 250, 150, true);
Was ich auch noch probieren könnte, wäre einfach ein paar Rechtecke anlegen und die visibility erst auf true setzen, wenn der Button gedrückt wird.
Aber wie kann ich die Sichtbarkeit beeinflussen (mit obigem bsp)?

Hoffe es ist einigermaßen verständlich!

Danke im Voraus,
MFG
 
Habe zufällig einen kleinen primitiven PaintClone geschrieben. Vielleich hilft der weiter:

Java:
package de.tutorials;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;

public class PaintClone extends Frame {

	private static final long serialVersionUID = -5732261106125358900L;
	private static final int SIZE = 800;
	private static final int LINIE = 0;
	private static final int OVAL = 1;
	private static final int RECHTECK = 2;
	private static final int LÖSCHEN = 3;
	private final BufferedImage bufferedImage = new BufferedImage(SIZE,SIZE, BufferedImage.TYPE_INT_RGB);
	
	private int shape = LINIE;
	private Color color = Color.WHITE;
	
		
	public Color getColor() {
		return color;
	}

	public void setColor(Color color) {
		this.color = color;
	}

	public int getShape() {
		return shape;
	}

	public void setShape(int shape) {
		this.shape = shape;
	}

	PaintClone(){
		super("PaintClone");
		setSize(SIZE,SIZE);
		setResizable(false);
		addWindowListener(new WindowAdapter(){	public void windowClosing(WindowEvent e) {	dispose();	}});
		addMouseListener(new MyMouseListener());
		setMenuBar(new MyMenuBar());
	}
	
	public void paint(Graphics g) {
		g.drawImage(bufferedImage, 0, 0,SIZE,SIZE, this);
	}
	
	public static void main(String[] args) {
		new PaintClone().setVisible(true);
	}
	
	
	class MyMouseListener extends MouseAdapter {
		private int x,y;

		public void mousePressed(MouseEvent e) {
			x = e.getX();
			y = e.getY();
		}

		public void mouseReleased(MouseEvent e) {
			drawShape(x, y, e.getX(), e.getY());
		}
		
	}
	
	private void drawShape(int x1, int y1, int x2, int y2) {
		Graphics g = bufferedImage.getGraphics();
		g.setColor(getColor());
		
		switch(getShape()){
		case LINIE: g.drawLine(x1, y1, x2, y2); break;
		case RECHTECK: g.drawRect(x1, y1, x2-x1, y2-y1); break;
		case OVAL: g.drawOval(x1, y1, x2-x1, y2-y1); break;
		case LÖSCHEN: g.clearRect(x1, y1, x2-x1, y2-y1); break;
		}
		repaint();
	}

	class MyMenuBar extends MenuBar {
	
		public MyMenuBar() {
			Menu m ;
			MenuItem mi;
			
			m = new Menu("Datei");
			mi = new MenuItem("beenden");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					dispose();
					
				}});
			m.add(mi);
			
			add(m);
			
			m = new Menu("Formen");
			mi = new MenuItem("Linie");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setShape(LINIE);
					
				}});
			m.add(mi);
			mi = new MenuItem("Oval");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setShape(OVAL);
					
				}});
			m.add(mi);
			mi = new MenuItem("Rechteck");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setShape(RECHTECK);
					
				}});
			m.add(mi);
			m.addSeparator();
			mi = new MenuItem("Löschen");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setShape(LÖSCHEN);
					
				}});
			m.add(mi);
			
			add(m);
			
			
			m = new Menu("Farben");
			mi = new MenuItem("Weiss");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setColor(Color.WHITE);
					
				}});
			m.add(mi);
			mi = new MenuItem("Rot");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setColor(Color.RED);
					
				}});
			m.add(mi);
			mi = new MenuItem("Gelb");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setColor(Color.YELLOW);
					
				}});
			m.add(mi);
			mi = new MenuItem("Grün");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setColor(Color.GREEN);
					
				}});
			m.add(mi);
			mi = new MenuItem("Blau");
			mi.addActionListener(new ActionListener(){

				public void actionPerformed(ActionEvent e) {
					setColor(Color.BLUE);
					
				}});
			m.add(mi);
			
			add(m);
			
			
		}
		
		
	}
}
 
Ich werds mal ausprobieren und das Ergebnis posten!
Aber vielen Dank für die wirklich sehr ausgiebige Hilfe!

Ist fast schon zu viel ;) darf danach ja gar net mehr sagen, dass das Programm von mir kommt :D

nochmal danke!

MFG
 
hey limago,

es hat wunderbar funktioniert mit deiner geposteten Klasse, hab sie
an meine Bedürfnisse angepasst und konnte sie so dann in meine
vorhandene GUI einbinden!

Danke für die Hilfe!

MFG
 
Zurück