Rekusive bearbeitung von Objekten

Status
Nicht offen für weitere Antworten.

Marvelman

Mitglied
Also ich arbeite immer noch ein wenig an mein Projekt namens CafeGUI
Ich einer Klasse namens Teller in der die Basic settings sind und die main Methode
Was aber wichtiger ist meinen ganzen Grafik Objekte sind in der Klasse MyPanel
Code:
public class MyPanel extends Panel implements ActionListener
Es ist so da MyPanel sehr viele Grafik objekte enthält würde ich gerne den Teil der unter
Code:
public void actionPerformed(ActionEvent e)
steht und die Grafik Objekte manupuliert, gerne auslagern in eine andere Klasse.
Ich hab schon überlegt ob ich ein neues Objekt einer neuen Klasse anlege unter der Methode actionPerformed, mein Propleme ist allerdings ich weiss nicht wie ich das Objekt der Klasse MyPanel von der neuen aus direkt oder indirekt manipulieren kann.
 
Wenn du dem neuen Objekt eine Referenz auf das Panel übergibst kann es dessen Methoden aufrufen.
 
Okay zu schnell getippt mein sowas in der art hatte ich mit gedacht mein jetziges Propleme ist das die Referrenz in der main Methode ist und die ja static ist will er mich nicht dran lassen und ich hab auch schon versucht eine zweite methode in den Teller zuschrieben die nicht static ist , meine umleitung dahin schlugt er auch nicht
 
Ich bin mir nicht sicher was du meinst , meine Referenz sicht z.b so aus
Code:
 Teller.p.a3.setText(Integer.toString(counterA1));
Ich hab den Syntax Klasse.Objekt.Objekt.command
Was logischerweise sehr ungünstig ist da es kein Objekt von der Klasse Teller ist und mir nicht klar ist wie ich das zusammen bringen soll.
Oder simmpler wo von soll ich ein Objekt machen und mit welcher bezug soll als Parameter übergeben werden?
 
Zur ergänzung die logischestrukture die ich bis jetzt habe:
Teller(main{MyPanel p})-> MyPanel(actionPerformed{MyInternal g})->MyInternal(MyInternal{und hier versuche ich auf MyPanel im Teller zu zugreifen})
Mit hilfe von:
Code:
Teller.p.unterobjekt;
 
in der Logikklasse hast du eine Referenz auf das Panel als Exemplarvariable
(wurde im Konstruktor mit übergeben und gespeichert)

dann sind die Aufrufe entweder

panel.textArea3.setText // keine Verwirrung, nur unschön

oder

panel.getTextAre3().setText // schöner, aber aufwendig da viele Operationen in Panel

oder

panel.setTextForArea3 // schöner, aber aufwendig da noch mehr Operationen in Panel

vielleicht geht
panel.setTextForArea(3,text)
wenn du hauptsächlich Elemente in Listen hast und weniger individuelle
 
Okay jetzt wil ich mal mit den missverständnissen aufräumen.
Also mein erstes propleme war wie kann ich aus
Code:
 actionPerformed(ActionEvent e)
Die source Quelle übergeben an das neue Objekt von MyInternal
Das hab ich so gelöst:
Code:
public void actionPerformed(ActionEvent e)
    {
    Object g = new Object();
    g = e.getSource();
    MyInternal transmi = new MyInternal(g);
    }
In Myinternal steht v das :
Code:
public class MyInternal
{
int counterA1 = 0;
int counterA4 = 0;
int counterA7 = 0;
int counterA10 = 0;
int counterA13 = 0;

final double kaffee= 0.80; 
final double tee = 0.65;
final double wasser = 0.35;
final double bier = 2.4;
final double fanta = 0.85;

    public MyInternal(object g)
    {
       if(g=="a1")counterA1=counterA1+1;
       if(g=="a4")counterA4=counterA4+1;
        if(g=="a7")counterA7=counterA7+1;
        if(g=="a10")counterA10=counterA10+1;     
        if(g=="a13")counterA13=counterA13+1;
        
        double help1=((double)Math.round(counterA1*kaffee*100))/100; 
        double help2=((double)Math.round(counterA4*tee*100))/100;
        double help3=((double)Math.round(counterA7*wasser*100))/100;
        double help4=((double)Math.round(counterA10*bier*100))/100;
        double help5=((double)Math.round(counterA13*fanta*100))/100;
        double help6 =((double)Math.round((help1+help2+help3+help4+help5)*100))/100;
        
        .a3.setText(Integer.toString(counterA1));
        a6.setText(Integer.toString(counterA4));
        a9.setText(Integer.toString(counterA7));
        a12.setText(Integer.toString(counterA10));
        a15.setText(Integer.toString(counterA13));
        s.setText(Double.toString(help6));
        
        if(g==q)
        {
    
        data.append("\n"+counterA1+" Kaffee "+help1);
        data.append("\n"+counterA4+" Tee "+help2);
        data.append("\n"+counterA7+" Wasser "+help3);
        data.append("\n"+counterA10+" Bier "+help4);
        data.append("\n"+counterA13+" Fanta "+help5);
        data.append("\n Summe "+help6);
        data.append(" \n ");
       
       
        counterA1=0;a3.setText(Integer.toString(counterA1));
        counterA4=0;a6.setText(Integer.toString(counterA4));
        counterA7=0;a9.setText(Integer.toString(counterA7));
        counterA10=0; .a12.setText(Integer.toString(counterA10));
        counterA13=0; a15.setText(Integer.toString(counterA13));
        s.setText(Integer.toString(0));
    }
}
    
}
Ich weiss, ich bin nicht sehr sauper bei der namesgebung gewesen aber das ist auch nicht mein Propleme.
Mein Propleme ist wie komme ich ihn:
Code:
import java.awt.*;
import java.awt.event.*;
public class Teller
{ 
    
    public static void main(String[] arg) 
    {
       MyPanel p = new MyPanel();
       Frame f = new Frame("Java Cafe");
       
        f.add(p);
        f.pack();
       
        f.setVisible(true);
        f.addWindowListener(new WindowAdapter()
        { public void windowClosing(WindowEvent e)
            {System.exit(0);}
           });
       }
       
        
       
    }
An die Refferenz von dem Objekt p von MyPanel , den so wie ich es verstanden habe lässt er mih das nicht so machen wie ich es will, irgendwie bin ich mittlerweile ziemlich verwirrt was den Lösungsweg anbelangt
 
häh? in der main hast du eine Referenz auf p, was willst du mehr? oder wo?
deutlich sprechen..
 
Nr1.) Ist an die Referenz komm ich nicht, mein compiler sagt dann
Code:
cannot find symbole - variable p
ich nehme an weil die Methode static ist.

Nr2.)Wenn ich die Referenz versuche einfach in die klasse zu schreiben statt in die main methode sagt er das:
Code:
 non-static variable p cannot be referenced from a static context
Was soviel heissen soll glaube ich, wie du kannt keine Varibale benutzen in der static methode die dort auch nicht erzeugt worden ist.

Nr3.)Meine event souce übergabe funktioniert nicht nach MyInternal, ich hab versucht e in Mypanel als Parameter zu übergeben wie du oben lesen kannst. Ich hab keine Ahnung wie das mit objekten als Parameter funktioniert ich hab bisher nur Primitive Variablen benutzt dazu. Der Fehler code bekomme ich
beim Konstruktor von MyInternal
Code:
cannot find symbole - class object
 
falls das Problem noch besteht (bin Ostern nicht da gewesen):
nur eine Fehlermeldung alleine reicht nicht, es muss auch Code dazu geben..
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben