probleme in der kommunikation von klassen

  • Themenstarter Themenstarter masterdot
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

masterdot

Gast
hallo ersteinmal...

ich brauche hilfe...

es geht um folgendes:
die aufgabenstellung war ein t9 system mit einer auswahlliste.
es funktioniert soweit alles, nur bekomme ich die auswahl aus der auswahlliste nicht in die hauptgui weitergerreicht.

es sieht folgendermassen aus:

es wird ein woerterbuch erzeugt, dieses wird an die grafische oberflaeche weitergegeben.

in der grafischen oberflaeche wird eine eingaberoutine erzeugt
Code:
    eingabe = new EingabeRoutine(dictionary);


dann wird von der grafischen oberflaeche per keylistener ein zeichen abgefangen und an die eingabe routine uebermittelt:

Code:
 public void keyReleased(KeyEvent e)
  {
[...]
   
       input.setText(eingabe.EingabeZeichen(e.getKeyChar(), this));
       // das eingegebene zeichen und die grafische oeberflaeche wird uebergeben
[...]

    validate();
  }

input ist hier das feld wo der text rein kommt.
das zeichen wird dann an die funktion EingabeZeichen weitergegeben.

Code:
 String EingabeZeichen(char zeichen, GrafischeOberflaeche haupt)
  {
  [...]
      suchvec = SucheWort(daswort);
    if (suchvec.size() > 0)
    {
      AusgabeMoeglichkeiten(haupt); // aufruf der auswahlliste

      // sonst das erste wort nehmen das gefunden wurde
      int stelle = Integer.parseInt((String) suchvec.elementAt(0));
      einwort = dictionary[stelle].StringHolen();

      if (suchvec.size() == 1)
      {
        daswort = "";
        einwort = dictionary[stelle].StringHolen();
    [...]
          }
    }
    [...]
    return einwort;
  }

das zeichen wird an den string daswort angefuegt und dann in die funktion SucheWort weitergegeben.

Code:
  Vector SucheWort(String suchwort)
  {
    Vector funde = new Vector();

    int menge = dictionary.length;
    for (int i = 0; i < menge; i++)
    {
    [...]
    }

    return (funde);
  }

der resultierende vector enthaelt die position der treffer im gesamten woerterbuch und wird in suchvec uebertragen.

Code:
      suchvec = SucheWort(daswort);

dann wird der suchvec ueberprueft.

Code:
   if (suchvec.size() > 0)
    {
      AusgabeMoeglichkeiten(haupt);
    [...]

wenn er mehr als 0 elemente hat, wird dann die AusgabeMoeglichkeitenfunktion aufgerufen

Code:
  void AusgabeMoeglichkeiten(GrafischeOberflaeche haupt)
  {
    if (suchvec.size() > 1)
    {
      AuswahlListe liste = new AuswahlListe(this);
    }
  }

die auswahlliste bekommt als parameter die eingaberoutine mitgegeben wegen dem suchvector.
dann baut sie anhand des suchvectors ein neues fenster auf und fuegt die elemente des suchvectors ein.
hierzu ziehe ich mir folgendes rueber:

Code:
    [...]

    this.haupt = haupt;                     // die eingabe routine
    this.suchvec = haupt.suchvec;           // der suchvector der eingaberoutine
    this.dictionary = haupt.dictionary;        // das woerterbuch

    [...]

wenn waehrend der darstellzeit des fensters der auswahlliste eine taste gedrueckt wird, wird per keylistener der timer angehalten, der dafuer sorgt, das sich das fenster schliesst, wenn nichts passiert, und es kommt ein eingabedialog:

Code:
  public void keyPressed(KeyEvent arg0)
  {

    String wahl =  JOptionPane.showInputDialog(null, "Ihre Auswahl:");
    try{

     [...]

      auswahl = Integer.parseInt((String)suchvec.elementAt(stelle));

      suchvec.removeAllElements();
      suchvec.addElement(auswahl + "");

    [...]
        
      
    }catch (NumberFormatException e)
    {
      dispose();
    }

soweit so gut... es geht, der index wird richtig angesprochen, es ist das richtige element und so weiter...

bloss wie bekomme ich jetzt diesen index da wieder raus?

was ich bis jetzt versucht habe:
- direkten zugriff auf die hauptoberflaeche
fehlgeschlagen
- weiterleiten zu der eingaberoutine
fehlgeschlagen

zudem finde ich komisch, das der suchvector zwar modifiziert wird, aber der aufbau abgeschlossen ist, bevor diese eingabe ueberhaupt abgefruehstueckt ist...


Code:
      suchvec = SucheWort(daswort);
    if (suchvec.size() > 0)
    {
      AusgabeMoeglichkeiten(haupt); // aufruf der auswahlliste

      // sonst das erste wort nehmen das gefunden wurde
      int stelle = Integer.parseInt((String) suchvec.elementAt(0));
      einwort = dictionary[stelle].StringHolen();

      if (suchvec.size() == 1)
      {
        daswort = "";
        einwort = dictionary[stelle].StringHolen();
    [...]
          }
    }
    [...]

nach meinem bisherigen verstaendnis ( arbeite noch nicht so lange mit der gui) sollte doch erst der block mit der ausgabemoeglichkeiten abgearbeitet werden, dann der block mit dem suchvec.size() kommen.
aber irgendwie kommt das nicht so wirklich an.

hat jemand eine ahnung wie ich das hinbekomme?

ich hoffe das die fragmente ausreichen um einen ueberblick zu bekommen, wollte der uebersichtlichkeit nicht den ganzen code posten...

wenn fragen sind, ich heute oefters hier am gucken, weil ich dringenst eine loesung brauche.. sonst kann ich das haken...

danke schonmal im voraus fuer jeden erdenklichen tip ( ausser das alles zu muellen 🙂 ) [/code]
 
wow, also wenn das ne anfängerfrage ist, dann brauch ich nix mehr fragen 🙂

du solltest es lieber im GUI forum probieren, da bekommst sicher schneller ne antwort als hier...
 
so, zur klaerung fuer jemanden, der evenutell ein aehnliches problem mal hat...

in dem aufruf wurde das fenster erzeugt, aber es wurde NICHT darauf gewartet, das aenderungen kommen.

folgender loesungsansatz:

das fenster muss erzeugt werden und das programm muss solange mit der abarbeitung warte, bis das fenster geschlossen ist.

ich habe jetzt folgende aenderungen in der auswahlliste gemacht:

Code:
class AuswahlListe extends JDialog implements ActionListener, KeyListener
[...]
  JFrame parent;
  
  public AuswahlListe  ( EingabeRoutine haupt)
  {
    parent = new JFrame();
[...]
    setModal(true);
[...]

mit dem setmodal(true) wird gesagt, warte bis dieses fenster zu ist... ist eine sonderoption des jdialogs wenn ich das richtig verstanden haben...

dank nochmal an beni!

hast mir viel arbeit erspart...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben