Konsole "nachbauen"

data89

Bekanntes Mitglied
Hallo zusammen,

ich habe (mal wieder) ein Problem und hoffe, dass Ihr mir helfen könnt:

Ich möchte mit Java eine Swing-Componente bauen, die sich so ähnlich verhält wie die Konsole z.B. unter Linux. Also man kann was eingeben und der Verlauf ist darüber sichtbar und man kann dann noch durch den Verlauf scrollen. Und dann gibt es ja da noch verscheidene Farben für den Text.

Ich habe irgendwann mal soetwas ähnliches gesehen, dass in Java jemand einen Matheparser geschrieben hat, der ein Textfeld hatte, in das man dann die Sachen eingeben konnte aber nicht den Rest ändern konnte (wie geht das?). Ferner habe ich bereits ein Beispiel geschrieben, wie man in einem JTextPane die Schrift verschiedenfarbig anmalen kann.

Könntet Ihr mir ein Paar Tipps geben, wie ich z.B. bei Google dannach suchen kann (was ist hier das Stichwort?)? Oder kennt Ihr vielleicht ein Tutorial?

Wäre echt super, wenn Ihr mir helfen würdet.
data89

P.S.: Auf die Lösung ala: man nehme ein JTextField und eine JTextArea und zeige den Verlauf in der Area und die Eingabe im Field habe ich schon gefunden aber das kommt bei mir nicht in Frage ...
 

meister-g

Bekanntes Mitglied
wie wäre es mit n JTextField je zeile übereinander, die du vom aussehen so änderst, wie du es dir wünscht?!
evtl gar auf JLabel oder noch weiter runter gehen und selbst hand anlegen.
 

data89

Bekanntes Mitglied
Aber, was ist wenn eine Eingabe länger ist als die Breite des Fensters? Dann muss es ja in die nächste Zeile umbrechen ...

Wie geht man es an, wenn man so eine Komponente komplett selber schreiben will?
Kennt keiner ein Tutorial/Beispiel etc?
 

data89

Bekanntes Mitglied
Hier: BeanShell - Lightweight Scripting for Java da ist doch eine Konsole "eingebaut". Nun muss ich nur noch (1) eine Source-Version bekommen (der Link auf der Seite unter Developer ist tot) und (2) dann noch die entsprechene Komponente finden und extrahieren. Und schon bin ich lucky ;-)

Weiß jeman, wo ich den sourcecode herbekomme?
 

data89

Bekanntes Mitglied
Hallo,

hier ein kleines funktionierendes Beispiel (einfach mal was eingeben und enter drücken):
Java:
public class Test extends DefaultStyledDocument {
		private DefaultStyledDocument doc;

		public Test() {
			doc = this;
		}
		

		public void insertString(int offset, String str, AttributeSet a)
				throws BadLocationException {
			
			if (((int) str.charAt(0)) == 10) {
				super.insertString(offset, System.getProperty("line.separator") + "???" + System.getProperty("line.separator"), a);
			} else {
				super.insertString(offset, str, a);
			}
		}

		public void remove(int offset, int length) throws BadLocationException {
			super.remove(offset, length);
		}

		
		public static void main(String a[]) {

			EditorKit editorKit = new StyledEditorKit() {
				public Document createDefaultDocument() {
					return new Test();
				}
			};

			final JEditorPane edit = new JEditorPane();
			edit.setEditorKitForContentType("abc", editorKit);
			edit.setContentType("abc");

			JFrame frame = new JFrame("Syntax Highlighting");
			frame.getContentPane().add(new JScrollPane(edit));
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			frame.setSize(800, 300);
			frame.setVisible(true);
		}
}
Nun, dass man jetzt nicht mehr die Linien vorher löschen kann ist ja nur noch abhängig von der Methode "remove(...)". Wenn man da den "super"-Teil rausnimmt kann man nichts mehr löschen.
Aber man müsste da jetzt eine Bedingung einbauen, die es nur erlaubt bis zum Anfang der Zeile den Inhalt zu löschen. Habt ihr eine Idee?

Gruß,
data89
 
G

Gelöschtes Mitglied 5909

Gast
dann gugg dir den textabschnitt an und schau ob ein \n bzw unix linebreak drin ist.

Java:
public class Test extends DefaultStyledDocument {
        private DefaultStyledDocument doc;
 
        public Test() {
            doc = this;
        }

fällt dir da eigentlich was auf?
 

data89

Bekanntes Mitglied
Ähmm ja, das ist irgendwie doppelt gemoppelt sinnlos, oder?

Also, drei Sachen:
1. Wie kann ich prüfen, ob ein Linebreak (System.getProperty("line.seperator")) drin ist?
2. Ich habe ja die Überprüfung, wenn "((int) str.charAt(0)) == 10", dass dann der Befehl verarbeitet werden soll. Funktioniert das immer?
3. Wie schütze ich mich davor, dass jemand irgenetwas mit Strg+C/V reinkopiert?

data89
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
T Swing Eigene Konsole AWT, Swing, JavaFX & SWT 5
S Inhalt der Java-Konsole in die JTextArea AWT, Swing, JavaFX & SWT 3
S Event Handling konsole Programm mit Tastendruck beenden AWT, Swing, JavaFX & SWT 5
precoc Konsole in GUI ausgeben AWT, Swing, JavaFX & SWT 8
S Java GUI Anwendung ohne Konsole starten AWT, Swing, JavaFX & SWT 6
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
K Konsole mit Swingkomponent simulieren AWT, Swing, JavaFX & SWT 3
T Java Konsole ins Tray minimieren AWT, Swing, JavaFX & SWT 5
X Swing Swing Element gesucht -> um als Konsole zu fungieren AWT, Swing, JavaFX & SWT 4
H virtuelle Konsole [solved] AWT, Swing, JavaFX & SWT 9
G Textfeld auslesen und auf der Konsole ausgeben? AWT, Swing, JavaFX & SWT 10
J KeyListener auf Konsole AWT, Swing, JavaFX & SWT 10
G wie verschwindet Konsole? AWT, Swing, JavaFX & SWT 3
H Komponenten übereinander anordnen, I/O-Konsole AWT, Swing, JavaFX & SWT 3
G JList mit Daten füllen wie die normale DOS-Konsole AWT, Swing, JavaFX & SWT 2
L Weiss nicht ob es hier her gehört - GUI ohne Konsole starten AWT, Swing, JavaFX & SWT 10
L JavaFX GUI nachbauen AWT, Swing, JavaFX & SWT 4
F LookAndFeel Nautilus in Swing nachbauen AWT, Swing, JavaFX & SWT 5
S Modalen Dialog nachbauen..? AWT, Swing, JavaFX & SWT 4
G JScrollPane nachbauen (klitzekleiner Haken) AWT, Swing, JavaFX & SWT 10
C JTree mit JList nachbauen AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben