Beiträge von Cheefkoch im Thema „Ideen für Informatik-Präsentation“

    Die Labels ändern sich ja nicht, kannste die nicht auch aufs JFrame auslagern?
    Falls ja könntest du, weil nur noch Buttons im Panel sind, mit Panel.getcomponents() die Ganzen Buttons auf einmal holen und leicht durchiterieren.

    Code
    for(JButton button : JPanel.getComponents()){     //Dostuff}

    oder einfach checken obs n Button oder ein Label ist und nur bei Buttons ausführen

    Code
    for(Component C : JPanel.getComponents()){
       if(C.getClass() == JButton){ 
           //Dostuff
       }
    }

    Könnt auch sein dass es C.getComponent() ist :grinning_face_with_smiling_eyes: Aber das Prinzip sollte verständlich sein.

    nebenbei bemerkt: JButton.getName() liefert NICHT den namen, der bei der deklaration verwendet wurde, man muss zuerst über .setName("name") einen namen zuweisen. tut man das nicht, liefert .getName() "null" zurück.

    nice 2 know :grinning_face_with_smiling_eyes: Da hab ich mich vertan (sorry).


    mir ist nicht ganz klar was du damit sagen willst, "JButton.setToolTipText("text")" geht nämlich. die betreffende methode ist laut javadoc von JComponent geerbt.

    Was ich sagen wollte war: Es gibt keine möglichkeit die Tooltip Eigenschaft beim erzeugen der Instanz direkt zu setzen. Natürlich kann man die den Tooltip mit der entsprechenden Methode setzen wenn die Klasse diese Eigenschaft + Methode besitzt, ich ging nur davon aus dass du sie gleich beim Instanziieren/erzeugen setzen willst. (Im Sinne von JButton A1 = new JButton(Name = A1, Tooltip = "A1", Grösse = 40 usw);



    ps. Deine If-Sortierung ist für manche Programmierer ein Dorn im Auge, da Code möglichst universal einsetzbar sein sollte und nicht durch hinzufügen eines einzelnen Komponenten unbrauchbar wird.

    Wenn man die Java-Docs vom JButton anschaut sieht man sofort, dass kein Konstruktor mit Tooltip existiert -> nicht möglich. Man könnte ne Wrapper Klasse für den Button schreiben, welche eine solche instanzierung beinhaltet.


    Ansonsten empfehle ich dir deine Buttons mit (meinem Lieblingen den) For-Schlaufen zu "Tooltippen"

    Code
    string[] horizontal = {"A","B","C","D","E","F","G","H"};int[] vertical = {1,2,3,4,5,6,7,8};int i = 0;for(JButton b : Buttons){    b.setTooltipText = string.Format("%s%d", horizontal[i % 8], vertical[i / 8]);    i++;}


    Wobei Buttons deine JButtons aufm Spielfeld sind (Liste, Panel Children oder whatever).



    ps. +1 Person die zu Faul ist die Docs zu lesen :grinning_squinting_face:




    Kleiner Edit/Nachtrag


    Wenn deine JButtons schon so heissen we der Tooltip sollte auch

    Code
    for(JButton b : JButtons){
        b.setTooltipText = b.getName();
    }

    funktionieren.

    wie nennt sich das zugehörige gui-element?

    Also ich würd ein Bild nehmen mit nem Gitter oder eine Wasserfläche mit gezeichnetem Gitter (Awesome Paint Skills).


    Tabellen eignen sich dafür nur bedingt, du könntest ne dursichtige Tabelle über das Bild legen und Rote X bzw Schwarze X für die Schüsse reinschreiben. (Es gibt meistens nicht "die perfekte Lösung" :grinning_face_with_smiling_eyes: nur krative umsetzungen die sich besser eignen)


    Das GridLayout ist, soweit ich weiss, ein LayoutManager. Der guckt nur dass die Elemte richtig geordnet und skaliert werden (halt "das layout managed").

    nur dass ich nicht extra die größe jedes buttons einzeln angeben muss.

    Bloss nicht :grinning_squinting_face:
    For-loop und berechnen lassen. Ist viel einfacher 1-3 Zahl für die Berechnung zu ändern als 64 Absolute Koordinaten.


    //Cheefkoch

    Also um die Speichermöglichkeit würd ich mir weniger Gedanken machen als um die Klassen, bzw die Softwareplanung/Aufbau.


    Beim Feldauswählen würd ich eine Riesige Fläche machen mit nem Gitter drauf und dann den Felder ne fix breite geben (zB. 10 pixel). Wenn man nun ins Feld klickt kann man gewählte Feld einfach aus der "EventPosition" rauslesen.


    Code
    public void actionPerformed(ActionEvent event) {     xfeld = Math.round(event.x / 10);                     //oder (int) event.x / 10    yfeld = dasselbe nur mit y }


    Fürs Feld zu speichern eigenen sich byte[][] da kannste 0 unbenutzt, 1 ins leere geballert und 10 schiffchen ist da, 11 schiffchen getroffen verwenden. Um zu checken ob wer gewonnen hat ist einfach :grinning_face_with_smiling_eyes: dann musste nur gucken ob der Spieler noch ne 10 im Arrayfeld hat.


    EDIT:
    Falls du das Fenster dynamisch gestalten will musst du die Feldbreite vorher kurz berechen:


    Code
    public void actionPerformed(ActionEvent event) { 
        int Feldbreite = event.width/8;
        int Feldhoehe = event.height/8;
        xfeld = Math.round(event.x / Feldbreite);   
        yfeld = Math.round(event.y / Feldhoehe);
    }