Text-GUI

So ich habe jetzt die Grundlagen für das ganze Projekt geschaffen und es geht an die Grafische Oberfläche.
Ich schreibe dafür einfach weiterhin in diesem Thread und der Thread kann so ruhig umbennant werden in etwas passenderes.

Ich möchte meine Oberfläche gerne so wie in diesem Video gestalten https://www.youtube.com/watch?v=_xvz_irsdnE oder https://www.youtube.com/watch?v=Aglmm0VON_g aber ohne die Maps und Etc nur wie ein Altes Dos Spiel
Wie gehe ich das ganze an?

[edit SlaterB: abgespalten, zuvor: http://forum.byte-welt.net/java-forum-erste-hilfe-vom-java-welt-kompetenz-zentrum/java-grundlagen-f-r-anf-nger-und-umsteiger-java-se-/13317-file-item-als-klasse-modellieren.html ]

mach doch lieber einen eigenen Thread, kannst auf diesen hier verlinken für Vorkenntnisse

eine GUI baut man Schritt für Schritt, JFrame, JPanel, Elemente einfügen,
Lehrbuch mit kopierbaren Codes ist bessere Grundlage, etwa wieder
Galileo Computing :: Java ist auch eine Insel - 14 Einführung in grafische Oberflächen
wobei ich dort GUI-Kapitel nicht als Stärke in Erinnerung habe

Es geht darum das das Spiel in einer Art CMD dargestellt wird.
In dem Buch geht es regelrecht um Schaltflächen und Buttons etc. :confused:
Also nur Text keine „Grafik“.

Es mag zwar nicht so wirken, aber eine GUI wie in deinem Video ist um einiges schwerer zu realisieren als eine “richtige” grafische Oberfläche mit bspw. Swing.
Ich würde daher klar dazu tendieren erstmal mit Swing anzufangen.

[quote=EikeB]Ich würde daher klar dazu tendieren erstmal mit Swing anzufangen.[/quote]Ober gleich mit JavaFX

bye
TT

Und wie siehts mit Curse aus ? Java Curses Library | SourceForge.net

Na, so schwer muss man es sich ja nicht machen. So wie ich das verstanden habe, (nur kurz durchgespult) ist die gui im video so aufgebaut, das es drei “bereiche” untereinander gibt. In dem ersten ist immer die map (?), im zweiten halt… text… und im dritten kann man was eingeben. Im prinzip wuerde esbdoch reichen einfach 3 textareas zu basteln, welche einen schwarzen hintergrund haben, den cursor auch schwarz zu machen, und die schrift art auf so ne konsolen schrift zu setzen.
Den inhalt der ersten beiden areas muesstest du je nach spielstatus modifizieren, die dritte kann der spieler ja bearbeiten

Ich bin jetzt soweit das ich zwei JPane´s habe und ein JTextField zum eingeben. Im Pane stelle ich dar.
Ich will einfach Text hinzufügen statt ihn immer zu ersetzen also dachte ich :

main ist das jPane

       ```

Aber das tut er natürlich nicht :b
Gibt es eine bessere Methode ? Ich meine es gibt so eine Art Document zum einspeichern und laden ?

EDIT:

Habe das einspeichern gefunden. Aber was ist mit dem Laden :/?

wie passt der gepostete Code zu ‚Text hinzufügen statt ihn immer zu ersetzen‘?
mal abgesehen davon dass ersetzt WIRD, ist dabei noch nichtmal neuer Text-Teil erkennbar,
es wird nur irgendwie HTML drumherum gebaut, da ist besonders spannend was denn vorher drinstand, keine HTML-Tags?

was darf man sich unter JPane vorstellen, JEditorPane?

lohnt sich vielleicht,

interessant aber auch
java - JTextPane appending a new string - Stack Overflow
mit

I doubt that is the recommended approach for appending text. This means every time you change some text you need to reparse the entire document. The reason people may do this is because the don’t understand how to use a JEditorPane. That includes me.

I much prefer using a JTextPane and then using attributes. A simple example might be something like:
[…]

ich persönlich kann aus keiner konkreten Erfahrung sprechen, in beiden nicht…

Dieser Aufruf mit Interface.main.setText sieht ziemlich hässlich aus. Warum muss die Logik etwas darüber wissen, wie die Gui den Text darstellt? Da bietet es sich an, eine Methode zu schreiben in der Gui, mit der der Text gesetzt wird. Das ganze main.setText[...] findet dann dort statt und das hat auch den Vorteil, dass dieses main private sein kann, was es sein sollte.

Wieso private ? Es gibt nur genau ein main.

Why Singletons are Evil - Being Scott Densmore - Site Home - MSDN Blogs
bye
TPD

Wenn ich Text in das doc einfüge, dann wird es ja nicht sofort in das TextPane geladen. Das möchte ich ganz gerne

EDIT:

Wie sieht das aus ?

    public void insertText()
    {
        try
        {
            doc.insertString(0, "xxxxxxxxxxxxxxxxxxxx", null );
            doc.insertString(doc.getLength(), "yyyyyyyyy", null );
            main.setText(doc.getText(0,doc.getLength()));
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }```

poste doch ein minimales vollständiges Testprogramm,
mit Definition von main, doc, Mini-GUI, main-Methode,
so dass jeder kopieren und ausführen kann

Aufruf von insertText() von einem (einzigen) Test-Button oder zeitverzögert automatisch aus main-Methode

wenn nicht vollständiges Programm, dann zumindest mehr Code,
du kannst auch selber z.B. den Stringdoc.getText(0,doc.getLength()) mit System.out.println() ausgeben, zufriedenstellender Inhalt?
ist der gepostete Code eigentlich der, der dich zur Frage verleitete oder schon später eine eigene, womöglich funktionierende Lösung?

oh Übersicht, du wirst gesucht

Eine eigene funktionierende Lösung. :b


public class text
{

JTextPane main = new JTextPane();
JFrame f = new JFrame("");

public static void main(String args[])
{

f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
f.setSize( 1024, 600 );
f.add(main , BorderLayout.CENTER);
f.setVisible(true);
insertText();

}
 public void insertText(String text)
    {
        try
        {    
            doc.insertString(doc.getLength(), text , null );
            main.setText(doc.getText(0,doc.getLength()));
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }





}


[quote=Quiji]Eine eigene funktionierende Lösung. :b[/quote]Aber nicht dass, was Du da gepostet hast, selbst wenn es kompilieren würde funktionierte es nicht…

KSKB ist anders…

bye
TT

So wie es in meinem Code steht funktioniert es. Das war nur einmal schnell drüber.

KSKB = Kleines, selbstständiges, kompalierbares Beispiel.

Also wenn es für so ein Spiel sein soll, bietet sich blacken an. Die Lib ist genau dafür gemacht. Dabei wird ein Window gerendert das console-like ist aber nicht die Konsole.

In einer echten Konsole funktionieren:
Charva
JavaCurses

Ich hab nur einmal mit JavaCurses herumgespielt. Das ging ganz gut.

Ist jetzt meine (Anfänger)-Idee
Mit JavaFX könnte das u.U. auch funktionieren, wenn man hier eine TextArea (nicht editable) benutzt und entsprechend über JFXCSS den Style entsprechend einstellt.
Mit einem Controller könnte man die StringProperty der TextArea dann entsprechend an eine StringProperty eines Threads binden, welcher denn die Ausgabe handelt.
Bei der TextArea gibt es auch appendText (man könnte also das binden auch lassen und jeweils nur die aktuellen Meldungen übergeben).
Die TextArea in eine ScrollPane wrappen, ein TextField und ein Button drunter klatschen und es sieht schon einmal etwas danach aus.

Ansonsten die von @schlingel vorgeschlagenen Libraries ganz gut zu sein für das Problem.

Edit:
Das scheint in Richtung CoffeMud zu gehen? Aber halt eher SinglePlayer?
[Bin begeisterter Mudder]