Graphics g, AdjustmentEvent e

Status
Nicht offen für weitere Antworten.

A3XX

Bekanntes Mitglied
Hi

Ich bin (immer noch 🙂 an meinem Lehrbuch und mir bereitet einfach dieses Graphics g und Event e Probleme...für was ist das? Was bringt das?!

Und bisher hat der Autor immer folgendes gecodet:

Code:
public void paint(Graphics g){
   g.drawString("Hallo du", 100, 100);
}

Und jetzt hat er in einem Beispiel (damit nicht alles wieder gelöscht wird mittels paint) folgendes gecodet:

Code:
public void adjustmentValueChanged(AdjustmentEvent e) {
   Graphics g = getGraphics();
   currentX = slider.getValue();
   g.drawLine(0, currentY, currentX, currentY);
   currentY = currentY + 5;
}

Nun kapiere ich gleich einiges nicht: Was macht die getGraphics Methode? Was bewirkt das Graphics g = ? Und der Autor sagte mal man müsse in jeder Methode dieses Graphics g deklarieren (oder an diese übergeben) wie in Beispiel 1, aber wieso muss er jetzt das irgendwie nicht?
Und was ist in diesen Buchstaben (g und e) gespeichert?! Wieso muss man die hinschreiben, vorallem das e, das man gar nicht braucht?! Sind diese Buchstaben fest oder könnte man auch z.B. m gebrauchen?!

Sorry bin halt noch ganz am Anfang und da blick ich nich durch 😳 [/code]
 
Hallo,

das ist mal eine Frage die ich beantworten kann
Das Graphics Objekt ist eine Variable die Graphikmethoden beinhaltet wie drawOval drawString drawLine drawEllipse
drawRect drawArc und diese brauchst du um deine Linie weiter unten zeichnen zu können.

Das e ist ein AdjustmentEvent um auf Bewegungen deines sliders (graphische SWING Komponente) reagieren zu können Soweit ich das verstanden habe zeichnest du jedesmal wenn du deinen slider bewegst eine Linie die sich nach unten zieht. Für verschiedene AWT und SWING Komponenten gibt es verschiedene Listener Interfaces die du implementieren musst damit deine Komponente auf Ereignisse von dir reagieren kann und verschiedene Listener Methoden wie ActionEvent, Windowevent, AdjustmentEvent, ItemEvent, MouseEvent, KeyEvent, ComponentEvent, FocusEvent, ... die du schreiben musst um zu sagen was sie machen soll. Komponenten sind von der Klasse Component abgeleitete Objekte die deine Container(Panel, Frame, Window, Dialog) um einen neuen Container oder aktive Komponenten(Button, Scrollbar, Choice, Checkbox, Label, List, TextComponent, TextArea, TextField) erweitern Diese haben eigene ListenerMethoden und eigene ListenerEvents und Listener Interfaces

zB

Code:
class Dialoge extends Dialog implements ActionListener{  //<< Listener Interface implementieren 
    public Dialoge(Frame parent) 
    {
    super(parent,"Dialoge",true);
    setBackground(Color.lightGray);
    
    Panel panel = new Panel();
    panel.setLayout(null);
    add(panel);
    
    Button anlegen = new Button("Anlegen");
    anlegen.setBounds(20,10,95,25);
    anlegen.addActionListener(this);        // << registrieren des Listeners um auf Ereignisse der Komponente        reagieren zu können  
    
    panel.add(anlegen);
    
    Button ändern = new Button("Ändern");
    ändern.setBounds(135,10,95,25);
    ändern.addActionListener(this);
    panel.add(ändern);
    
    Button löschen = new Button("Löschen");
    löschen.setBounds(250,10,95,25);
    löschen.addActionListener(this);
    panel.add(löschen);
       
    Label mess = new Label("Nichts gedrückt");
    mess.addActionListener(this);
    mess.setBounds(20, 280, 50, 30); 
    panel.add(mess);
    
    addWindowListener(new WindowAdapter() 
    {
        public void windowClosing(WindowEvent e) 
        {
        endDialog();     //<< Schließen des Fensters mit einem Komponente am oberen rechten Bildschirmrand
        }
    });	
    pack();
}
	
    public void actionPerformed(ActionEvent e) //<< Listener Events um zu sagen was getan werden soll    {
    Object quelle = e.getSource(); 
        if(quelle instanceof Button)          //<< Abfragen welche Komponente das Listener Event ausgelöst hat
        {
            if(e.getActionCommand().equals("Anlegen"))
            {
            mess.setText("Anlegen gedrückt");           //<< Darauf reagieren
            }
                else if(e.getActionCommand().equals("Ändern"))
	{
    	mess.setText("Ändern gedrückt");
    	}
    	    else if(e.getActionCommand().equals("Löschen"))
    				{
    				mess.setText("Löschen gedrückt");
    				}
			}
		}
		
    public void endDialog()
    {
    setVisible(false);
    dispose();
    ((Window)getParent()).toFront();
    getParent().requestFocus();
    }
}

Übrigens kann mir wer sagen warum dieses Programm nicht funktioniert?

Edit:
1. Benutze bitte Code-tags (hab sie jetzt reingeflickt), ist einfach übersichtlicher.
2. Wenn du Fragen hast, mach ein neues Topic auf. Heute wurde schoneinmal einer deiner Beiträge gelöscht, weil er zu OT war.

Beni
 
@A3XX

Also so toll ist dieser Code nicht... (solch ein Konstrukt einzusetzen ist in höchstem Masse unschön und gefährlich (wenn man die API genau liest, weiss man wieso :wink: ))
Informationen über Methoden kannst du hier finden (in der API)

"Graphics g = " weisst der Variable g vom Typ Graphics eine Referenz, die von "getGraphics" kommt zu.

Deklarieren oder übergeben muss man sie nur, wenn man sie auch verwenden will (was ist das für ein Buch, kommt mir suspekt vor... oder du schreibst komisch ab ???:L )
Und der Autor daklariert g: "Graphics g = " ist die Deklaration.

In den Buchstaben sind Referenzen (Links, Verweise) auf andere Objekte gespeichert.

Die muss man hinschreiben, damit man sie benutzen kann (wie willst du sonst auf die Objekte zugreiffen).

Das e wurde in einem Interface definiert, und ist in diesem Fall zwingend vorgeschrieben (oder das Progi bekommt ein seltsames Verhalten).

Natürlich kann man die ersetzen, du kannst auch "Graphics theOnlyGraphicsInThisMethode = " schreiben. Das ist zwar aussagekräftiger, aber umständlicher.


So, lies in den Büchern weiter (und probier selbst mal ein bisschen aus).

Es gibt übrigens auch gute Onlinebücher:
http://www.javabuch.de/
http://www.galileocomputing.de/openbook/javainsel3/index.htm

Am besten liest du alle gleichzeitig, da auch die Autoren Lücken in ihrem Wissen haben...

mfg Beni
 
Hm ok, schon einiges klarer, aber was ich eben noch nicht verstehe:

Der Autor sagte (das STück Code is natürlich nur ein Schnipsel des ganzen 🙂 : Mit paint und repaint wird alles gelöscht und neu gezeichnet...

aber eben mit dem "Graphics g = " nicht...wieso?!
 
Ich find das toll, jetzt ist mir schon zweimal geholfen worden

duct tape is like the force! It has a light side - a dark side

and it holds the universe together
 
A3XX hat gesagt.:
aber eben mit dem "Graphics g = " nicht...wieso?!
Weil das niergends die "löschen"-Methode aufruft. Paint hingegen wird von einer Methode aufgerufen, die zuerst noch löscht.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben