Problem mit Dialogen


  • Yuri
  • 675 Aufrufe 11 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit Dialogen

    hallo,
    da ihr mir mit meinem anderen problem so gut geholfen habt , gibt es gleich das nächste !

    mein ziel ist es einen planer zu erstellen. die aufgabe ist wahrscheinlich relativ simpel, wenn man ersteinmal grundkenntnisse in java hat. es soll ein hauptfenster mit 3 buttons (neuer termin, neue aufgabe und löschen ) und eine liste ( wo dann halt die aufgaben/termine aufgeführt sind ) geben. bei mir hapert es mit den beiden dialogen für einen neuen termin/ eine neue aufgabe, die sich öffnen sollen sobald man auf den entsprechenden button klickt.
    hier ist mein code für die termineingabe:

    Java-Quellcode

    1. import java.awt.*;
    2. import java.awt.event.*;
    3. public class TerminEingabe extends java.awt.Dialog
    4. implements java.awt.event.ActionListener {
    5. private java.awt.Button ok;
    6. public TerminEingabe () {
    7. setLayout (null);
    8. setSize (200,150);
    9. setVisible(true);
    10. ok = new java.awt.Button ("OK");
    11. ok.addActionListener(this);
    12. ok.setSize (70,20);
    13. ok.setLocation (10,90);
    14. add (ok);
    15. }
    16. public void actionPerformed (java.awt.event.ActionEvent e)
    17. {
    18. term = new Termin (tfd.getTExt(), tfb.getText());
    19. setVisible(false);
    20. }
    21. public static void main(String[] args){
    22. TerminEingabe dia = new TerminEingabe();
    23. dia.setVisible(true);
    24. }
    25. }
    Alles anzeigen

    er sagt mir: cannot find symbol - constructor dialog()
    woran liegt das?
    danke schonmal im voraus,
    liebe grüße,
    yuri
    “ WikiLeaks has probably produced more scoops in its short life than the Washington Post has in the past 30 years ”
    — The National, November 19, 2009

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Yuri ()

  • Probiers mal damit.
    Wenn du eine Klasse erweiterst über extends, musst du in der Regel auch den Superkonstruktor aufrufen per super();
    Wenn du allerdings Dialog erweiterst musst du super auch ein parent mitgeben. Da du aber keins hast hier in dem Fall hab ich das jetzt mal umgeschrieben und stattdessen JFrame vewendet.
    Außerdem hab ich bei ActionPerformed noch einen Fehler ausgebessert.

    PHP-Quellcode

    1. import java.awt.*;
    2. import java.awt.event.*;
    3. import javax.swing.JFrame;
    4. public class TerminEingabe extends JFrame implements ActionListener {
    5. private java.awt.Button ok;
    6. public TerminEingabe() {
    7. super("Test");
    8. setLayout(null);
    9. setSize(200, 150);
    10. setVisible(true);
    11. ok = new java.awt.Button("OK");
    12. ok.addActionListener(this);
    13. ok.setSize(70, 20);
    14. ok.setLocation(10, 90);
    15. add(ok);
    16. }
    17. public void actionPerformed(java.awt.event.ActionEvent e) {
    18. Termin term = new Termin(tfd.getTExt(), tfb.getText());
    19. setVisible(false);
    20. }
    21. public static void main(String[] args) {
    22. TerminEingabe dia = new TerminEingabe();
    23. dia.setVisible(true);
    24. }
    25. }
    Alles anzeigen
  • :depp: ich bin blöd - tut mir leid. ich war so intelligent nicht genau deinen code zu übernehmen sondern änderungen zu suchen und zu übernehmen. da kriege ich nun keine fehlereldungen mehr. danke! aber klappen tut es immer noch nicht, ich poste nochmal den code für das haupt planer fenster. da krieg ich noch fehler, wenn ich die dialoge aufrufen möchte. wäre nett wenn sich das nochmal jemand anschaut.
    lg

    PHP-Quellcode

    1. public class Planer extends java.awt.Frame
    2. implements java.awt.event.ActionListener
    3. {
    4. private java.awt.Button ntb;
    5. private java.awt.Button nab;
    6. private java.awt.Button lös;
    7. private EintragListe li;
    8. public Planer()
    9. {
    10. setLayout (null);
    11. setSize (400, 300);
    12. setVisible(true);
    13. ntb = new java.awt.Button ("Neuer Termin");
    14. ntb.setSize (90,30);
    15. ntb.setLocation (300, 40);
    16. add (ntb);
    17. ntb.addActionListener(this);
    18. nab = new java.awt.Button ("Neue Aufgabe");
    19. nab.setSize (90,30);
    20. nab.setLocation (300,70);
    21. add (nab);
    22. nab.addActionListener(this);
    23. lös = new java.awt.Button ("Löschen");
    24. lös.setSize (90,30);
    25. lös.setLocation (300,100);
    26. add (lös);
    27. lös.addActionListener(this);
    28. li = new EintragListe ();
    29. addWindowListener(new WindowAdapter());
    30. }
    31. public void actionPerformed (java.awt.event.ActionEvent e)
    32. {
    33. java.awt.Button b;
    34. b= (java.awt.Button) e.getSource();
    35. String name = b.getLabel ();
    36. if (name.equals("Neue Aufgabe"))
    37. {
    38. AufgabeEingabe eingabe = new AufgabeEingabe(this);
    39. anzeige.einfuegen (eingabe.getaufg());
    40. }
    41. if (name.equals("Neuer Termin"))
    42. {
    43. TerminEingabe eingabe = new TerminEingabe(this);
    44. anzeige.einfuegen (eingabe.getTerm());
    45. }
    46. if (name.equals("Löschen"))
    47. {
    48. remove (angeklickt);
    49. }
    50. }
    51. public static void main(String[] args){
    52. Planer app = new Planer();
    53. app.setVisible (true);
    54. }
    55. }
    Alles anzeigen

    btw. warum den code als php anzeigen lassen?
    edit:
    mir drängt sich grad eine weitere frage auf: warum erhalte ich eine fehlermeldung wenn ich statt "extends JFrame", "extends Dialog" schreibe? es soll doch ein dialog sein...:S
    “ WikiLeaks has probably produced more scoops in its short life than the Washington Post has in the past 30 years ”
    — The National, November 19, 2009

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Yuri ()

  • Gut also PHP deswegen, weil es dann die Formatierung beibehält, es übersichtlicher ist und besser aussieht.

    Zu deinem Code. Der ist schwer Testbar, da ich die anderen Klassen wie AufgabeEingabe, TerminEingabe etc nicht habe.


    Ansonsten ist das mit dem WindowAdapter fehlerhaft.
    Habs mal auf ein brauchbares Lvl befördert.

    Ein weiterer Fehler ist noch beim remove(angeglickt)
    ein angeklickt gibts garnicht also was soll da bitte removed werden?
    Das musst du ändern.

    PHP-Quellcode

    1. import java.awt.event.WindowAdapter;
    2. import java.awt.event.WindowEvent;
    3. public class Planer extends java.awt.Frame implements
    4. java.awt.event.ActionListener
    5. {
    6. private java.awt.Button ntb;
    7. private java.awt.Button nab;
    8. private java.awt.Button lös;
    9. private EintragListe li;
    10. public Planer() {
    11. setLayout(null);
    12. setSize(400, 300);
    13. setVisible(true);
    14. ntb = new java.awt.Button("Neuer Termin");
    15. ntb.setSize(90, 30);
    16. ntb.setLocation(300, 40);
    17. add(ntb);
    18. ntb.addActionListener(this);
    19. nab = new java.awt.Button("Neue Aufgabe");
    20. nab.setSize(90, 30);
    21. nab.setLocation(300, 70);
    22. add(nab);
    23. nab.addActionListener(this);
    24. lös = new java.awt.Button("Löschen");
    25. lös.setSize(90, 30);
    26. lös.setLocation(300, 100);
    27. add(lös);
    28. lös.addActionListener(this);
    29. li = new EintragListe();
    30. addWindowListener(new WindowAdapter(){
    31. public void windowClosed(WindowEvent arg0) {
    32. System.out.println("Window close event occur");
    33. System.exit(0);
    34. }
    35. });
    36. }
    37. public void actionPerformed(java.awt.event.ActionEvent e) {
    38. java.awt.Button b;
    39. b = (java.awt.Button) e.getSource();
    40. String name = b.getLabel();
    41. if (name.equals("Neue Aufgabe")) {
    42. AufgabeEingabe eingabe = new AufgabeEingabe(this);
    43. anzeige.einfuegen(eingabe.getaufg());
    44. }
    45. if (name.equals("Neuer Termin")) {
    46. TerminEingabe eingabe = new TerminEingabe(this);
    47. anzeige.einfuegen(eingabe.getTerm());
    48. }
    49. if (name.equals("Löschen")) {
    50. //remove(angeklickt);
    51. }
    52. }
    53. public static void main(String[] args) {
    54. Planer app = new Planer();
    55. app.setVisible(true);
    56. }
    57. }
    Alles anzeigen


    Generell rate ich dir dazu auf AWT zu verzichten weil es doch schon sehr veraltet ist. Setz lieber gleich auf Swing auf.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von stelzi ()

  • bevor ich mich intensiv mit deinen verbesserungen befasse - möchtest du die anderen klassen mal sehen? hilft das? oder ist dir das zu zeitraubend?
    edit1:
    - den window adapter hatte ich extern als eigene klasse - das hat funktioniert.
    ich hau einfach mal den code raus:

    der termineingabe dialog ist ja oben schon; die aufgabeeingabe ist analog dazu.

    die drei klassen eintrag ( abstrakt) , sowie aufgabe, termin funktionieren - das hab ich schon getestet.


    das ist meine eigene liste - da hab ich dann auch das angeklickt her - ich war mir allerdings nicht sicher ob ich sowas einfach übernehmen kann...

    PHP-Quellcode

    1. public class EintragListe extends java.awt.List
    2. {
    3. public EintragListe ()
    4. {
    5. setSize (400,250);
    6. setLocation (100,200);
    7. }
    8. public void einfuegen (Eintrag item)
    9. {
    10. add (item.liefereAnzeige ());
    11. }
    12. public void entfernen ()
    13. {
    14. int angeklickt = getSelectedIndex();
    15. if (angeklickt>=0)
    16. {
    17. remove (angeklickt);
    18. }}}
    Alles anzeigen


    das war dann auch schon alles was ich habe.
    mein prob ist halt nur, die beiden dialoge für nen neuen termin / ne neue aufgabe zu erstellen..:( ich schau mir jetzt mal deine verbesserungen oben an :)
    lg und nen schönen sonntag noch
    edit2:
    ich hab mal deinen code getestet , aber er sagt mir immernoch: " cannot find symbol - constructor AufgabeEingabe(Planer)
    lg
    “ WikiLeaks has probably produced more scoops in its short life than the Washington Post has in the past 30 years ”
    — The National, November 19, 2009

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Yuri ()

  • Jo wäre nicht schlecht wenn man die anderen Klassen auch überblicken könnte.
    Vielleicht kannst ja dein Prog bei sowas wie googlesource oder sourceforge einchecken dann kann man auf alles zugreifen. Und mit den entsprechenden Rechten könnte man dann gleich was verändern ^^

    das mit dem angeklickt kann trotzdem nicht funktionieren. das ist ja nur ne lokale variable innerhalb einer Methode der Klasse EintragListe. Wie soll das dann in der Klasse Planer bekannt sein?
    Hier müsstest du schon über deine Referenz li gehen. Und selbst dann bleibt die Variable lokal in der Methode. Also rankommen tust du da nie und nimmer.

    Wie kommst du eigentlich zu soviel nicht funktionierenden Code?
    Normalerweise testet man doch, und wenn etwas nicht funktioniert behebt man das zuerst bevor man weiter schreibt ^^

    Zu der Fehlermeldung cannot find symbol. Das müsste bedeuten das du entweder keinen Entsprechenden Konstruktor hast in deiner Klasse. Oder die Klasse nicht importiert wurde, obwohl sie in einem anderen package steckt.

    Achja und sowas wie ö,ä,ü sollte man eigentlich nicht verweden. Auch wenns geht :D
  • hey.
    mittlerweile sind alle klassen (außer einem window adapter ) hier drin.

    das mit dem angeklickt schaue ich mir nochmal an, ich hatte keine ahnung ob s funktioniert , wollte es aber probieren.

    teile von dem code sind aus einem übungsheft/-buch kopiert. und den rest hab ich dann halt selber probiert nur klappen tut halt nicht alles. bzw einiges klappt , der rest nicht ;)

    was heißt das mit dem konstruktor jetzt speziell für mein bei´spiel? also dass er mir beim kompilieren vom planer sagt, er findet den konstruktor für dein aufgaben/termin-dialog nicht?

    lg und danke für deine bemühungen
    edit: (btw, ich glaub ich hab keinen post ohne edit ^^ )
    kann ich den eintrag über eine methode entfernen die ich in der klasse liste definiert habe?
    “ WikiLeaks has probably produced more scoops in its short life than the Washington Post has in the past 30 years ”
    — The National, November 19, 2009
  • AufgabeEingabe und TerminEingabe ist auch nicht drin ;) Nur am Rande :D

    Ja wahrscheinlich findet er den Konstruktor für AufgabeEingabe(Planer) nicht.
    Und ich nehm mal stark an, so einen solchen Konstruktor hast du garnicht in der Klasse drinstehen. :)

    Den Eintrag könntest du theoretisch in so gut wie jeder Klasse löschen. Nur müssen dann in der Methode auch die entsprechenden Refernzen zum löschenden Objekt etc vorhanden sein. Sonst geht das nicht.
  • hallo, ich bins nochmal.
    ich hab trotz einigen abratens weitergemacht mit dem planer. der großteil ( eigentlich alles wichtige klappt (wider erwarten )) nun auch. ich komm nur grad nicht damit klar, wie ich das action event (siehe code oben- und denkt euch die fehler weg) für das löschen von einem eintrag mache. den button gibts, einen action listener auch.
    lg yuri
    edit:
    etwas voreilig gepostet; habs rausgefunden, ist ja doch recht simpel!
    also, vielen dank an stelzi fürs helfen =)
    kann geschlossen werden.
    “ WikiLeaks has probably produced more scoops in its short life than the Washington Post has in the past 30 years ”
    — The National, November 19, 2009

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Yuri ()