GUI - Raster mit Elementen

  • ... oder so!
    Ich weiß nicht mal genau, wie ich in einem Satz beschreiben soll, was ich will :)

    Ich probiers mal:
    Der User bekommt einen String in der GUI dargestellt (wo auch immer, da bin ich mir eben noch nicht sicher), der aus verschiedenen Elementen besteht (aber als eine Zeile dargestellt werden soll, so ähnlich wie

    Code
    3 + 4 + 7 - 99

    , die Zahlen wären dann die Elemente).
    Klick der User jetzt auf einen Button (z.B. "ungerade") sollen all jene Elemente gehighlighted werden, auf die das zutrifft. ("+" und "-" usw wären dann nur Füllmaterial, irgendwie dargestellt, darauf kommts mir grad nicht an)

    Und nun will ich, dass der User auf die gehighligteten Elemente klicken kann und mit denen etwas passiert (z.b. sie mit 2 mulitpliziert werden, egal). Da Ergebnis dieser Anwendung soll dann in einer weiteren Zeile dargestellt werden.

    Also

    Code
    3 + 4 + 7 - 99
    /* klick "ungerade" */
    [B]3[/B] + 4 + [B]7 [/B]- [B]99[/B]
    /*klick auf 3 */
    6 + 4 + 7 - 99

    Meine Frage: wie kann ich mit den Java-Gui Designsachen etwas erzeugen, was
    1. zur Laufzeit die Anzahl der Elemente einer Zeile bekommt (denn die ist leider nicht fix vorgegeben und kann sich auf von Zeile zu Zeile verändern) und
    2. klickbar ist?
    Ich habe schon an Buttons in einem Raster gedacht (deshalb mein Titel), also z.B.

    Code
    Button1 | Button2 | Button3 |
    Button1 | Button2 | Button3verändert | 
    ...

    Ich hab meine GUI bisher faulerweise nur mit dem Netbeans-Guidesigner gemacht, also insofern ist mein Wissen zum richtig-Gui-designen noch nichtmal gesät worden, ich hab aber gehofft, da irgendwie mit dem Designer noch etwas hinbiegen zu können...

    Was bisher leider nicht ging, ist, in der ActionPerformedMethode des geklickten Buttons einfach mal eine Buttonreihe zu erstellen - irgendwie...mach ich da was falsch :)
    Und mit GUIs hab ich leider noch nicht so richtig viel Erfahrung, deshalb seh ich mich da grad noch nicht durch, welche Möglichkeiten/Objekte ich benutzen/einfügen kann.

    Mit Netbeans hab ich mal nur mit Swing gearbeitet, da war die Palette halt größer und hat mir besser gefallen :) War auch kein Problem und läuft super, aber jetzt grad steh ich an....

    Hoffe, irgendjemand versteht mein Kauderwelsch über das Problem und kann mir Input geben! :)
    Oder mir einfach auch nur sagen, dass das nie-und-nimmer geht, dann such ich mich wenigstens nicht zum Dodel!

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • Mir würde als erstes ein JTable einfallen, mit einem CellRenderer und TableModel könntest du die gewünschten Effekte erreichen.
    Allerdings weiß ich nicht, ob dir eine Tabelle als Darstellungsart passt. Prinzipiell kannst du sowas mit eigentlich allen GUI-Elementen erreichen, es wäre also wichtig, wenn du eine konkrete Vorstellung hast.
    Das mit den Buttons ist natürlich auch eine Möglichkeit.
    Wenn du dich für eine Variante entschieden hast, müsste es dann eh noch genügend konkrete Fragen geben ;)

    There's no better place than 127.0.0.1!

  • .
    Hoffe, irgendjemand versteht mein Kauderwelsch über das Problem und kann mir Input geben! :)
    Oder mir einfach auch nur sagen, dass das nie-und-nimmer geht, dann such ich mich wenigstens nicht zum Dodel!

    SWT Gridlayout...

    So ungefair halt..

    int x; // Anzahl der Elemente, wie sie zur Laufzeit festehen
    gl = new GridLayout;
    GridLayout.numColumns = x;
    /* hab aber noch nie ausprobiert, ob das auch mit Variablen geht */

    Text myText = new Text(gl, SWT.NONE);

    usw usf :)

    hth

    I used to be an owl...

    881 :rock:

  • es wäre auch ne überlegung wert einfach von jpanel zu vererben und diese funktionalität selbst zu implementieren

    also einfach nen mouselistenener implementieren und die paint methode zu überschreiben und wenn du elemente draufpackst (zahlen usw) gibst du ihnen halt x/y koordinaten und ne breite/höhe und schaust ob sie angeklickt werden usw usw

    alternativ, aber ich weiss nicht inwiefern das gehen würde, machst du ein jpanel mit einem NULL-layout (also absolute koordinaten) und packst die elemente als jlabels drauf, diese jlabels kannst du wieder extenden und mouselistener implementieren und wenn sie angeklickt werden verdoppelst du die zahl die sie derstellen halt

    also ich würde schon das panel extenden und irgendwie mir ne datenstruktur überlegen je nachdem was ich brauche und das einfach selbst implementieren indem ich methoden und klassen überschreibe

    [FONT=Arial, Helvetica, sans-serif](\__/) [/FONT]
    [FONT=Arial, Helvetica, sans-serif] (='.'=) [/FONT]This is Bunny. Copy Bunny into your signature to help
    [FONT=Arial, Helvetica, sans-serif](")_(")[/FONT] him on his way to world domination.

  • Danke für die Tipps mit dem JTable und dem Gridlayout, ich glaub, die werd ich mir mal als erstes ansehen!
    Den JPanel-Abkömmling selbst machen werde ich wohl erst in Erwägung ziehen, wenn die einfachen Methoden nicht mehr weiterkommen, danke aber für die Idee :)

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • Nach langem herumgetue habe ich mich für eine Liste von Rectangles entschieden (ok, es war ein heißer Tipp von einem Freund ;) )....

    In den Java-Tutorials hab ich eine nette Anleitung gefunden :
    http://java.sun.com/docs/books/tut…g/refining.html

    Auf diesem Code baut auch - so ungefähr - meine Applikation auf....
    Mein Problem ist aber, dass ich schon wieder (anders gehts leider nicht) die Anzahl der Rectangles erst erfahre, wenn der User irgendetwas eingegeben hat, also zur Laufzeit.
    In dem Beispiel wird das redSquare aber schon bei "paintComponent" erstellt, soweit ich das sehen kann ganz am Anfang.
    Ich hab auch schon versucht, einfach das "g.drawString" in irgendeiner anderen Methode, die erst zur Laufzeit ausgeführt wird, aufzurufen....nix da.... mein JPanel bleibt leer....
    (mache ich aber alles so wie im Beispiel, also dass schon bei Erstellung der MyPanel Klasse ein RedSquare erstellt wird, funktioniert alles)

    Dennoch bin ich mir sicher, dass man auch erst während alles läuft solche Graphiken erstellen kann, das kanns ja sonst nicht sein :)
    Kann mir da jemand nochmal einen guten Tipp geben?
    Irgendwo repaint() aufzurufen hab ich auch schon gelesen, aber wo das wirklich hingehört, weiß ich nicht so genau....

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

    Einmal editiert, zuletzt von Almlieschen (14. Juli 2008 um 11:22)


  • Kann mir da jemand nochmal einen guten Tipp geben?
    Irgendwo repaint() aufzurufen hab ich auch schon gelesen, aber wo das wirklich hingehört, weiß ich nicht so genau....

    Ich kann wieder nur zu swt greifen da haben die meisten Element eine Methode redraw(). Aufrufen mußt die, wenn Du das gui fertig gebaut hast, sprich wirklich alle Elemente vorhanden sind.

    hth

    I used to be an owl...

    881 :rock:

  • Könntest du mal bitte den Code posten?

    Ich weiß jetzt nicht genau, welchen Code Du meinst... also Beispiel eines SWT Tables:

    I used to be an owl...

    881 :rock:

  • Könntest du mal bitte den Code posten?

    Falls du meinen Code gemeint hast, ist er so ziemlich genauso (andere Variablennamen) wie in http://java.sun.com/docs/books/tut…g/refining.html mit dem einfachen Unterschied, dass ich noch eine Methode habe, die eine (Klasseninterne) Methode "createSquares" aufruft. Sobald die aufgerufen wird, ist auch schon bekannt, wieviele Rectangles/Squares ich brauche, und hier sollen dann in einer Schleife diese Elemente erstellt werden.

    Aber das geschieht eben zur Laufzeit, und soweit ich das verstanden habe, wird die "paintComponent()" Methode am Anfang aufgerufen.....

    Aja, meine Methode createSquares läuft ohne Fehler durch, also zumindest hängt nicht alles von vornherein, jedoch wird einfach nur nichts geprinted...
    Beim aktuellen Versuch habe ich am Ende von createSquares

    Code
    g.drawString("really my panel", 10, 20);
            repaint();


    stehen....und das geht eben nicht :)

    Hoffe, das war Codeersatz genug! Sonst müsst ich ziemlich viel posten.....

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

  • Ja passt schon, das müsst reichen! ;)
    Muss gestehen dass ich den Link noch nicht angeklickt hatte....:engel:

    Muss jetzt mal weg aber ich schau mir das dann nachher an! ;)

    There's no better place than 127.0.0.1!

  • Also für erste, bevor sich noch jemand ausser mir Arbeit antut: ich habe in meiner HauptUI-Klasse das repaint aufgerufen, und so wies aussieht wird dann immer das "paintComponent" aufgerufen....derzeit mal komm ich zurecht - glaub ich - falls ich doch wieder ansteh, meld ich mich nochmal :)

    EDIT: ok, schaut immer noch gut aus....ich bekomm, was ich will :)

    Danke für die Hilfe!!!

    Ihr glücklichen Augen, Was je ihr gesehen, Es sei wie es wolle, Es war doch so schön!

    Einmal editiert, zuletzt von Almlieschen (14. Juli 2008 um 16:04)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!