Fragen zur Formatierung & Anderes

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

  • Fragen zur Formatierung & Anderes

    Hi,
    Ich hab mich hier mal angemeldet weil wir grad in der Schule Java lernen und ich vorher privat mit C# angefangen hatte.
    Hab aber nicht mehr als Die Grundlagen.
    Wir benutzen BlueJ und die "sum-libraries"
    Daher hab ich einige Fragen:

    1) ich möchte die Auflösung des Bildschirms in 2 Variablen speichern, mit welchen Befehlen kann ich das machen? Wir haben in der Schule eine Kindersicherung am pc (mns oder so), kann die das irgendwie behindern?

    2) Ich möchte das Fenster zentriert in der Mitte erstellen. Wenn ich es aber mit "new Bildschirm" und dann mit "setLocationRelativeTo(null)" mache, wird es am Ursprung erstellt und dann nach einer gefühlten eweigkeit verschoben. Wie kann ich das Fenster sofort in der Mitte erstellen?

    3) Ich möchte in einer Methode eine Uhr darstellen, die bis sie manuell unterbrochen wird läuft. Wie kann ich die Methode dann beenden?

    Ich hab zu allen Fragen gegoogelt aber leider nichts für mich verständliches Gefunden.
    mfg Zwergling

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

  • Zwergling schrieb:


    Ich hab zu allen Fragen gegoogelt aber leider nichts für mich verständliches Gefunden.
    mfg Zwergling


    Hi und Willkommen ;)

    Hm also bei google findest du die Antworten zu den ersten beiden Fragen, selbst mit recht einfachen Ausdrücken, sehr sehr schnell

    1) [google]java zentrieren[/google]
    2) [google]java bildschirmauflösung[/google]

    Was genau verstehst du denn an den Lösungen nicht? Vielleicht können wir dir so ja helfen :)

    Zu der Uhr:
    Das Problem was du haben wirst ist, dass dein Programm komplett stehst wenn du einfach nur ne Methode schreibst und diese ablaufen läßt.
    Warum ist das so? Tjoah, deine Anwendung muss die GUI anzeigen und auf Ereignisse (Button klick o.ä.) reagieren. Das ganze geschieht in einem Thread (Prozessfaden). Wenn du nun im selben Thread eine Uhr laufen läßt, die ja "dauerhaft" am "zählen" ist, belegst du diesen Thread und deine GUI ist leider extrem träge bzw. unbrauchbar.

    Das ganze muss also nebenläufig zum GUI Thread geschehen, eben in einem eigenen Thread.
    Dafür gibt es etliche Lösungen im Netz und ich glaube auch hier im Forum aber wenn du gerade mit Java anfängst ist das vmtl. nicht die richtige Thematik.
    Wenn du dich n bisschen auskennst ist das o.k. da sich die beiden Thread nicht synchronisieren müssen oder dergleichen. Sie laufen ja komplett unabhängig von daher ist das nicht so richtig schwierig.
    Mach erstmal die ersten beiden Punkte. Wenn du das geschafft hast kannst du dich ja mal mit dem Interface (weißt du was interfaces sind?) Runnable beschäftigen und mit der Klasse Thread. Aber wie gesagt das übersteigt eig. deinen Kenntnissstand.

    Viele Grüße!
  • Also bei google ist bei mir das meiste java skript, was ich nicht verwenden kann.
    Bein den anderen sind das kilometerlange codes, bei denen ich nicht erkennen kann was da gemacht wird und wieso.
    1)Ich wollte das halt möglichst nach dem Schema:

    Quellcode

    1. int auflösungX = "Breite in Pixel"; // Wobei Breite in Pixel eben das benötigte zum auslesen sein soll
    2. int auflösungY = "Höhe in Pixel"; // Auch der ausgelesene Wert


    2)zum zentrieren hab ich es halt mit

    Quellcode

    1. screen.setLocationRelativeTo(null)

    versucht, was ich in den Konstruktor geschrieben hab. Allerdings will ich halt das "screen" sofort in der Mitte erstellt wird, hierbei wird am Ursprung erzeugt und dann springt er in die mitte, was ziemlich nervig ist.
    Etwas anderes verständliches finde ich da nicht.

    3)Meinst du mit interface sowas wie buttons? Also zum Beispiel am Anfang der Uhr Methode eine Button Methode öffnen die nen Button platziert auf den ich drücke und dann die eigentliche Methode (also die Uhrschleife) beende und die Uhr lösche?

    4) Ist heute im Unterricht aufgetreten. gibt es eine Möglichkeit das was eine Methode eben auf "screen" gemahlt hat, wieder rückgängig zu machen (ohne übermalen) also zu löschen?

    Auf jeden Fall schön mal Danke für deine/eure Hilfe.
  • 1) Möchtest du es zwingend in zwei Integer speichern?
    Alternativ könntest du nen zusammengesetzten Datentyp "Dimension" nehmen

    Quellcode

    1. Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();


    2)
    einfach mal das setVisible nach der zentrierung ausführen lassen.

    3)
    Nein ok dann habt ihr euch noch nicht so richtig mit dem oo-paradigma auseinander gesetzt.

    4)
    Wie ist denn "screen" typisiert (JLabel, JPanel,...)
    Das ganze kann man etwas komplexer Lösen (wenn ihr noch kein OOP hattet ist davon abzuraten) oder eben etwas radikaler.
    Radikal soll heißen dass du dir einfach vorher ne Kopie des Objekts machst und die speicherst. Bei der Nachricht "Rückgängig" kannst du das aktuelle dann einfach überschreiben bzw. die Referenz umbiegen.
    Nicht so richtig schön aber sollte funktionieren.
  • Also:
    1) Die einzige möglichkeit für mich so ein Fenster zu erstellen ist bisher den Constructor von Bildschirm aus sum.kern aufzurufen.
    Andere hatten wir noch nicht. Hierbei erbt die Klasse Bildschirm von "JFrame".

    "Class Bildschirm" schrieb:


    java.lang.Object
    java.awt.Component
    java.awt.Container
    java.awt.Window
    java.awt.Frame
    javax.swing.JFrame
    by sum.kern.Bildschirm

    Das is die (?)Vererbungskette(?)
    Die möglichkeiten diesen zu erstellen sind:

    Quellcode

    1. Bildschirm()
    2. Bildschirm(boolean pMitDoubleBuffering)
    3. Bildschirm(int pBreite, int pHoehe)
    4. Bildschirm(int pBreite, int pHoehe, boolean pMitDoubleBuffering)
    5. Bildschirm(int pLinks, int pOben, int pBreite, int pHoehe)
    6. Bildschirm(int pLinks, int pOben, int pBreite, int pHoehe, boolean pMitDoubleBuffering)
    7. Bildschirm(int pLinks, int pOben, int pBreite, int pHoehe, String pName, boolean pAlsFenster, boolean pMitDoubleBuffering)

    Ich werde die Auflösung also wohl in eine von diesen möglichkeiten umformen müssen.

    2) Was ist setVisible und wie mache ich das?

    3) Nein haben wir noch nicht. Bisher haben wir nur irgendwas gemalt. Eben mit Stift und Buntstift aus sum.kern auf Bildschirm.
    Dazu hatten wir noch wie man mit der Uhr aus sum.werkzeuge pausen erstellt.
    Dann hatten wir noch die "for-schleife" angesprochen, while und andre nicht. Ebenfalls noch keine "if-clauses".

    4) Wie mache ich denn eine Kopie von dem ganzen und wie füge ich sie danach wieder ein? Wir haben in informatik noch nicht wirklich was gemacht.

    5) Kann ich in BlueJ eine Methode erstellen, die ich zwar vom in einer anderen Methode aufrufen kann, aber nicht direkt beim Ausprobieren? Zum Beispiel eine Methode "Mund" für einen Smiley den ich dann in der Methode "Smiley" aufrufen kann, aber nicht direkt über den Klick auf das rote Kästchen bei BlueJ?

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

  • Hi,


    1) Das Beispiel was ich dir gezeigt habe benutzte den Datentyp "Dimension". Das Wort "zusammengesetzt" sollte ein Hinweis darauf geben das dieser eben Höhe und Breite speichert. Die kannst du "erfragen".
    Zum Beispiel:

    Quellcode

    1. Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    2. int hoehe = dim.Height() ;
    3. int breite = dim.getWidth();

    Oder eben kürzer ohne "dim".
    Die Werte kannst du dem Konstruktur vom JFrame übergeben.

    2)
    Öhm okay das scheint so als wenn ihr die Oberflächen nicht selbst programmiert hättet sondern generiert?
    setVisible setzt dein Fenster auf "sichtbar". Vorher ist es eben "unsichtbar" aber eventuell trotzdem schon da ;)
    Wenn du das "sichtbar" machen nach den anderen Einstellungen (z.B. Positionierung) vornimmst, solltest du keine komischen Effekte mehr haben.

    3)
    Jo ok sorry, wollt dich nicht verwirren. Find die Vorgehensweise von manchen Dozenten nur seltsam schon an Oberflächen rum zu kloppen aber nichtmal die Grundlagen zu lehren (keine Kritik an dich; kannste ja nix für :-/ )

    4)
    Alles in Java erbt von "Object". Das ist sozusagen die Mutter aller ;)
    In Object gibt es auch eine Operation "clone" aber lassen wir das lieber. Das geht vermutlich zu weit.
    Am besten lernt ihr erstmal die Grundlagen. Hier bräuchten wir jetzt etwas, dass man "überschreiben" von Operationen nennt. Gehört zur Vererbung aber wie gesagt das sollte dann nach den Grundlagen geschehen :)

    5)
    Ich habe nicht die geringste Ahnung von BlueJ ;) Was genau treibt denn dieses rote Kästchen?
    Also du kannst Methoden dahingehend modifizieren dass sie nur aus der eigenen Klasse aufgerufen werden können. Dazu schreibst du einfach "private" in den Kopf der Methode.
    Bsp:

    Quellcode

    1. private void tuWas() {
    2. }


    Jetzt kommt es durchaus darauf an wie BlueJ und sein rotes Kästchen arbeiten ;) Aber probieren kannst du es ja mal.
  • 1) Wie kann ich das einsetzen? Wenn ich das direkt in den Konstruktor schreibe, wo auch der Bildschirm erstellt wird, bekomm ich den Fehler:
    cannot find symbol - class Dimension

    Quellcode

    1. public Objektzeichnungen()
    2. {
    3. Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    4. int hoehe = dim.Height() , breite = dim.getWidth();
    5. screen = new Bildschirm (breite, hoehe);
    6. pen = new Stift();
    7. clock = new Uhr();
    8. }

    2) Wirklich programmiert haben wir eigentlich noch nichts. Wir haben halt nur in den methoden befehle aneinandergereiht. Kaum Schleifen, kein if.
    3) Ich find das auch ein bisschen seltsam, ist aber wahrscheinlich weil die meisten Schüler es ziemlich langweilig finden einfach nur texte zu schreiben ohne wirklich was zu sehen (bin in Klasse 11).
    4) ok.
    5) Dieses rote Kästchen erscheint wenn man den Konstruktor aufruft, dort kann man dann manuell die methoden aufrufen. Ich denke, dass private da nicht viel helfen wird, da es eben auch in der Klasse steht.
    6) Gibt es gute Bücher und Seiten mit Aufgaben die du empfehlen kannst? Haben jetzt zwei Wochen Ferien und ich möchte da ein bisschen weiter lernen. Allerdings da wirklich programmieren und Java nicht als schlechtes Paint nutzen.
    Allerdings sollte der Preis da nicht über 60€ liegen, ab da wirds schwer meinen Eltern zu erklären warum ich unbedingt das brauche. Java ist auch eine Insel hab ich als open book schon gefunden, aber kennst du "bessere"? Muss nicht für BlueJ sein (wenn man Visual Studio gewohnt is is BlueJ einfach nur doof).

    Danke für deine Hilfe,
    mfg Zwergling

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Zwergling ()

  • Hey du :)

    1) Jau das sieht gut aus nur muss man diese nicht basis-typen noch "einbinden" sprich importieren.
    Im Fall von Dimension müsstest du ziemlich weit oben im Quelltext, unter "package ..." (falls vorhanden) also schreiben: import java.awt.geom.Dimension (wenn ich mich nicht irre; wenns nicht geht google am besten noch mal nach der Klasse.)

    3) Ah okay jo dass kann ich mir vorstellen ;)

    6) Also ich persönlich finde die Reihe "Von Kopf bis Fuß" recht gut. Didaktisch ziemlich genial und recht einfach erklärt.
    In deinem Fall wäre das "Java von Kopf bis Fuß". Das kostet um die 50€. Ansonsten bei ebay oder ähnlichem mal schauen ob du es nicht günstiger gebraucht bekommst *klick*.

    Wenn du das Buch durchgearbeitet hast, hast du die Grundlagen eigentlich soweit ganz gut drauf. :)


    Viel Erfolg dir! :)

    [amazon]http://www.amazon.de/Java-von-Kopf-bis-Fu%C3%9F/dp/3897214482/ref=sr_1_1?ie=UTF8&qid=1286453654&sr=8-1[/amazon]
  • 1) Ok hab ich gemacht, mit

    Quellcode

    1. import java.awt.Dimension;

    Jetzt kommt der Fehler
    cannot find symbol - variable Toolkit

    Muss ich da noch irgendwas importieren oder wo is der Fehler?
    6) Danke für den Tipp, werd ich mir mal anschauen.

    7) So noch ein Problem himzugekommen.

    Quellcode

    1. import sum.kern.*;
    2. import sum.werkzeuge.*;
    3. public class Uhr
    4. {
    5. Bildschirm screen;
    6. Stift pen;
    7. Uhr clock;
    8. public Uhr()
    9. {
    10. screen = new Bildschirm (600, 600);
    11. pen = new Stift();
    12. clock = new Uhr();
    13. }
    14. public void maleUhr()
    15. {
    16. pen.bewegeBis(300,300);
    17. pen.zeichneKreis(100);
    18. }
    19. }
    Alles anzeigen


    Wenn ich hier jetz den Konstruktor ausführe, öffnet dieser jede sekunde ein neuen screen. Lösche ich das "clock = new Uhr();" passiert das nicht. Weiß jemand wieso?

    mfg Zwergling

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

  • 1) Danke, jetz hats geklappt.
    6) So, Buch ist bestellt. Werd das mal durcharbeiten wenn es da ist. (JUHU FERIEN!!)
    7)Soweit ich weiß, wird im Konstruktor ein Objekt der (aufgeführten) Klassen erstellt.
    Das wäre dann ein Bildschirm der 600 Pixel groß und breit ist.
    Ein Stift mit dem ich dann später mit den methoden auf "screen" malen kann.
    Und zuletzt noch eine Uhr (welche noch keine Befehle und keine Werte hat) und nichts machen sollte.
    Ich hab leider keine Ahnung was die nicht richtig läuft.
    Ich hab das ja auch nur aus einem anderen Projekt von mir rüberkopiert, wo das ohne Probleme geklappt hat.

    mfg Zwergling

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Zwergling ()