Frage zur paint-Methode (AWT)

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo, ich habe eine Übungsaufgabe aus einem Buch (Java für Studenten) versucht zu lösen.
Aufgabe war, dass eine symbolische Schildkröte einen Stift auf dem Bauch hat und man via Button,
das Teil bewegen kann. Warum werden aber alle gezeichneten Linien wieder 'gelöscht' wenn das nächste
mal paint aufgerufen wird? Vielen Dank vorab. Wenn es andere Hinweise oder Verbesserungen gibt,
dann bin ich auch da nicht abgeneigt.

Denke, dass ich das auch fast hin bekommen habe, aber waru

Code:
import java.applet.Applet;
import java.awt.Button;
import java.awt.Graphics;
import java.awt.Scrollbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;


public class Schildkroete extends Applet implements AdjustmentListener, ActionListener{

	
	private Scrollbar schieber;
	private int schiebewert;
	private int startX = 100;
	private int startY = 100;
	private int endeX = 100;
	private int endeY = 100;
	private int status = 1;
	
	private Button stifthoch, stiftrunter, links90, rechts90, nPixelVorwaertsGehen;
	public void init(){
		
		setSize(500, 500);
		schieber = new Scrollbar(Scrollbar.HORIZONTAL, 0,1,0,100);
		add(schieber);
		schieber.addAdjustmentListener(this);
		stifthoch = new Button("Stift hoch");
		add(stifthoch);
		stifthoch.addActionListener(this);
		stiftrunter = new Button("Stift runter");
		add(stiftrunter);
		stiftrunter.addActionListener(this);
		links90 = new Button("90 Grad links");
		add(links90);
		links90.addActionListener(this);
		rechts90 = new Button("90 Grad rechts");
		add(rechts90);
		rechts90.addActionListener(this);
		nPixelVorwaertsGehen = new Button("n Pixel vorwärts");
		add(nPixelVorwaertsGehen);
		nPixelVorwaertsGehen.addActionListener(this);
		
		
	}

	public void adjustmentValueChanged(AdjustmentEvent e) {
		
		schiebewert = schieber.getValue();
		
		// TODO Auto-generated method stub
		
	}
	
	public void paint (Graphics g){
		System.out.println("Ergebnis startx + schiebwert: " + (startX + schiebewert));
		System.out.println("Schiebewert: " + schiebewert);
		System.out.println("startX: " + startX);
		System.out.println("startY: " + startY);
		System.out.println("endeX: " + endeX);
		System.out.println("endY: " + endeY);
		g.drawLine(startX, startY, endeX, endeY );
		g.drawString(String.valueOf(schiebewert) , 50, 100);
			
			
			
			
			startY = endeY;
			startX = endeX;
		}
	

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == stifthoch)
		{
			endeY = startY - schiebewert;
			status = 2;
		}
						
			
		if (e.getSource() == stiftrunter)
			{
			 endeY = startY + schiebewert;
			 status = 4;
			}
		
		
		if (e.getSource() == links90)
		{
			switch (status)
			{
			
			case 1: endeY = startY - schiebewert; status = 2; break;
			case 2: endeX = startX - schiebewert; status = 3; break;
			case 3: endeY = startY + schiebewert; status = 4; break;
			case 4: endeX = startX + schiebewert; status = 1; break;
				
			}
		}
		if (e.getSource() == rechts90)
		{
			switch (status)
			{
			
			case 3: endeY = startY - schiebewert; status = 2; break;
			case 4: endeX = startX - schiebewert; status = 3; break;
			case 1: endeY = startY + schiebewert; status = 4; break; 
			case 2: endeX = startX + schiebewert; status = 1; break;
				
			}
		}
		if (e.getSource() == nPixelVorwaertsGehen)
		{
			
			
			System.out.println("endeX ist vor der Zuweisung: " + endeX);
			System.out.println("schiebewert ist: " + schiebewert);
			System.out.println("ok, hier nochmal: endeX ist hier: " + endeX);
			
			switch (status)
			{
			
			case 2: endeY = startY - schiebewert; status = 2; break;
			case 3: endeX = startX - schiebewert; status = 3; break;
			case 4: endeY = startY + schiebewert; status = 4; break;
			case 1: endeX = startX + schiebewert; status = 1; break;
				
			}
			repaint();
			}
		
		
					
	}
}
 

Leroy42

Top Contributor
Anonymous hat gesagt.:
Warum werden aber alle gezeichneten Linien wieder 'gelöscht' wenn das nächste
mal paint aufgerufen wird?

Weil dies das Grundprinzip sämtlicher GUI-Anwendungen auf Multi-Task-Systemen ist.

Die paint-Methode muß immer alles zeichnen, da es ja sein kann, daß
deine Anwendung kurzfristig von einer anderen verdeckt wird und nicht immer
im Vordergrund ist.

Lösung ist nicht direkt zu zeichnen, sondern die Informationen,
die das zu zeichnende definieren, in einer Collection (ArrayList, ...)
zu speichern und repaint() aufzurufen, sodaß paint() dann immer alle
bisher aufgelaufenen Zeichnen-Operationen ausführt.
 

Marcel_Handball

Bekanntes Mitglied
Ich weiß nicht, ob es elegant ist; ich hab es mal folgendermaßen gemacht:

Code:
public void update (Graphics g){
       paint(g);    
}

Füge einfach die update-Methode hinzu, obwohl es wohl besser wäre alle Elemente in einem Array zu speichern, da sonst z.B. beim Minimieren wieder alle Elemente von dem Canvas verschwunden sind.

Gruß Marcel
 

Leroy42

Top Contributor
Marcel_Handball hat gesagt.:
Ich weiß nicht, ob es elegant ist; ich hab es mal folgendermaßen gemacht:
...
Füge einfach die update-Methode hinzu.

??? :shock: :autsch: :shock:

Wohl nicht dein Tag heute, Marcel? :cool: :bae:
 

funnybones

Mitglied
Danke für die prompte Hilfe an alle. Mit update funktioniert es. Denke aber darüber nach, dass ggf. mal über ein Array zu versuchen. Was speichere ich dann eigentlich in dem Array? Koordinaten sind es ja nicht? Objekte? Ihr seht, ich stehe da noch ziemlich auf dem Schlauch.

Meint ihr, es wäre gut mit AWT anzufangen oder gleich auf Swing zu setzen.

Danke und Gruß. funnybones

PS: vorhin war ich wohl nicht eingeloggt, daher als Gast die Frage gestellt.
 

funnybones

Mitglied
André Uhres hat gesagt.:
Weil du in der paint die Werte veränderst:
startY = endeY;
startX = endeX;

Das muss ich doch machen, oder nicht? Sonst habe ich doch immer nur den ersten Startpunkt, wenn ich diese Zuweisung nicht vornehme, oder?
 

André Uhres

Top Contributor
Das gehört aber wahrscheinlich nicht in paint, sonst zeigt paint ja beim nächsten Mal was anderes (z.B. wenn du minimierst/maximierst), ohne daß eine Aktion stattgefunden hat.
 

funnybones

Mitglied
Wo wäre es Deiner Meinung nach günstiger, wenn nicht in paint()?

In der ActionPerformed-Methode vor den ganzen if-Abfragen?

Danke und Gruß. funnybones
 

André Uhres

Top Contributor
Ja, das ist gut.

EDIT:
Für diese Übung kannste ruhig bei AWT bleiben, denk ich mal, die Gui is ja net die Hauptsach.
Im Array kannste Objekte speichern die jeweils alle Infos zu einer Teillinie speichern.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Frage zum paint Prozess AWT, Swing, JavaFX & SWT 3
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben