virtuelle Konsole [solved]

Status
Nicht offen für weitere Antworten.

Holodoc

Mitglied
Hi zusammen!

Ich habe folgendes Problem:
Ich möchte eine Konsole simulieren, die eine bestimmte Anzahl von Zeilen und Spalten hat. Dabei sollen alle Zeichen gleich groß sein.
Das größte Problem ist aber, dass diese keinen Zeilenabstand haben dürfen,damit ich mit Unicodezeichen ähnlich wie damals in MS DOS Rahmen zeichnen kann.

Farbe und sowas spielt keine Rolle (wird eh weiß auf schwarz werden)

HAt jemand ne Idee wie ich das realisieren kann?

Danke!

Holodoc
 
Zuletzt bearbeitet:

Wildcard

Top Contributor
Hört sich an als möchtest du eine Art textbasierte GUI?
Warum verwendest du nicht einfach eine echte Konsole und eine Bibliothek wie Charva oder JCurses?
 

Holodoc

Mitglied
Danke für die Antwort. Leider kann ich das nicht verwenden.

Ich schreibe an einer Computersimulation (also mit Registern, MMU etc pp) und wollte diese um eine virtuelle Ausgabe erweitern (texturbasiert, da pixelbasiert viiiiiiel zu langsam wäre)

Diese Computersimulation ist in Swing visualisiert, so dass man jederzeit die Register ablesen kann.
 

Wildcard

Top Contributor
texturbasiert, da pixelbasiert viiiiiiel zu langsam wäre
Das ist erstmal nur eine Behauptung...
Warum sollte Font Rendering schneller sein als primitive grafische Objekte zu zeichnen?
Aber ich will dich nicht davon abhalten dich ins Unglück zu stürzen.
Was brauchst du mehr als graphics#drawString mit einem nicht proportionalen Font?
 

Holodoc

Mitglied
ich Idiot!

Natürlich hast du Recht, dass man das gut mit den Grafikoptionen machen kann. Ich war irgendwie die ganze Zeit versessen drauf nen Control zu verwenden.

Bzgl der Schnelligkeit: Bei mir ist das jedenfalls schneller, da in der Simulation ein Programm assembliert werden kann, welches dann in dieser Simulation laufen soll. Für jeden einzelnen Pixel würde man dann einen Aufruf brauchen, die die (simulierte ) CPU verarbeiten muss. Deswegen mach ich das nur Textbasiert.

Auf jeden Fall vielen Dank für die schnelle Antwort! Hast mir n gutes Stück weitergeholfen.

Für alle die vll ein ähnliches Anliegen haben hier mal der (zugegebenermaßen nicht perfekter) Quellcode:

[HIGHLIGHT="Java"]
import javax.swing.JPanel;

import javax.swing.SwingUtilities;
import java.awt.Graphics;

@SuppressWarnings("serial")
public class MyConsole extends javax.swing.JFrame {
private JPanel jConsole;


/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
MyConsole inst = new MyConsole();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}

public MyConsole() {
super();
initGUI();
}

private void initGUI() {
try {
jConsole = new MyPanel();
this.add(jConsole);
jConsole.setBackground(new java.awt.Color(0,0,0));
jConsole.setFont(new java.awt.Font("Courier New",0,18));
jConsole.setForeground(new java.awt.Color(255,255,255));
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
class MyPanel extends JPanel{
// 0x20 == SPACE

// 0x2554 = linke obere Ecke
// 0x2557 = rechte obere Ecke


// 0x2550 = horizontal
// 0x2551 = vertikal

// 0x255A = linke untere Ecke
// 0x255D = rechte untere Ecke
private char[][] data= {
{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '},
{' ', 0x2554, 0x2550, 0x2550, 0x2550, 0x2550, 0x2550, 0x2550, 0x2557, ' '},
{' ', 0x2551, ' ', ' ', ' ', ' ', ' ', ' ', 0x2551, ' '},
{' ', 0x2551, ' ', ' ', ' ', ' ', ' ', ' ', 0x2551, ' '},
{' ', 0x2551, ' ', 'H', 'e', 'l', 'l', 'o', 0x2551, ' '},
{' ', 0x2551, 'W', 'o', 'r', 'l', 'd', ' ', 0x2551, ' '},
{' ', 0x2551, ' ', ' ', ' ', ' ', ' ', ' ', 0x2551, ' '},
{' ', 0x2551, ' ', ' ', ' ', ' ', ' ', ' ', 0x2551, ' '},
{' ', 0x255A, 0x2550, 0x2550, 0x2550, 0x2550, 0x2550, 0x2550, 0x255D, ' '},
{' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}
};
public void paint (Graphics g) {
super.paintComponent(g);
for (int i=0; i < this.data.length; i++){
System.out.println("DRAW AT:" + i*18);
g.drawChars(this.data, 0, this.data.length, 0, (i+1)*18);
}
}


}
}
[/HIGHLIGHT]
 

Wildcard

Top Contributor
Bzgl der Schnelligkeit: Bei mir ist das jedenfalls schneller, da in der Simulation ein Programm assembliert werden kann, welches dann in dieser Simulation laufen soll. Für jeden einzelnen Pixel würde man dann einen Aufruf brauchen, die die (simulierte ) CPU verarbeiten muss. Deswegen mach ich das nur Textbasiert.
Nein... habe es mir 3 mal durchgelesen, aber verstehe es nicht...
Im übrigen, das System.out vergisst du hoffentlich nicht zu entfernen. Du würdest dich wundern wie sehr dadurch dein Programm in die Knie geht.
Und du willst auch nicht paint überschreiben, sondern paintComponent.
 

Holodoc

Mitglied
ah danke :D
System.out.println hatte ich bereits lange schon rausgenommen, nur halt hier beim posten noch net :D

Ich wage nochmal ein Erklärungsversuch (ist ja eigentlich egal, da das Problem ja gelöst wurde):

Ich schreibe gerade an einer Simulation, mit der man verstehen kann, wie ein PC auf unterster Ebene Arbeitet und Adressiert. Dabei hat der BEnutzer die möglichkeit eigene Programme in Assemblerform einzugeben (ähnlich der Intelschreibweise). Diese lassen sich schrittweise ausführen, so dass man beispielsweise bei dem Befehl "MOV R2, 3H" sehen kann, dass der Wert 3H in ein Register geladen wurde.
Diese Simulation beinhaltet natürlich auch Interrupts, einen Assembler der den Assemblercode in Bytesprache übersetzt, diverse Infofenster, in denen z.B. steht, welchen Befehl die CPU gerade bearbeitet hat bzw. auf welche Werte die MMU geschrieben und gelesen hat, da die simulierten Befehle ja in wirklichkeit viel mehr Befehle darstellen, um die Funktionalität zu simulieren.

Wenn man jetzt damit einzelne Pixel setzen würde, würde es viel zulange dauern, bis man ein vernünftiges Bild erstellt hat.

Ich hoffe das war n bissl besser erklärt....

Danke nochmal!


Holodoc
 

Wildcard

Top Contributor
Was für Pixel setzen? Du sprichst von Rahmen zeichnen und ein drawRect ist immer noch schneller als endlos Text zu rendern.
 

Holodoc

Mitglied
Ich glaube wir sprechen ein wenig aneinander vorbei.

Der Rahmen wollte ich mit ASCII-Zeichen machen um mit innerhalb der Simulation eine TextGUI zu erstellen.

Ich werde in meiner Simulation ja kein Befehl einbauen, der mir direkt nen Rahmen zeichnet. Das soll ja programmiert werden. Es wird so sein, dass wenn in der Simulation etwas über den virtuellen Bildschirm (die Konsole) etwas ausgegeben werden soll, die Koordinaten und das zu schreibene Zeichen in Register geschrieben werden und ein Interupt ausgelöst wird.
 

Wildcard

Top Contributor
Ok, da sprachen wir tatsächlich aneinander vorbei. Es war für mich aus deinem Posting nicht ersichtlich von was für Pixeln du sprichst, also blieb als einziger Anhaltspunkt die Rahmen Sache.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
vladimir Swing virtuelle Tastatur realisieren AWT, Swing, JavaFX & SWT 3
S Virtuelle Tastatur AWT, Swing, JavaFX & SWT 30
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
data89 Konsole "nachbauen" AWT, Swing, JavaFX & SWT 7
X Swing Swing Element gesucht -> um als Konsole zu fungieren AWT, Swing, JavaFX & SWT 4
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
M [SOLVED]komponenten unter einem JTabbedPane AWT, Swing, JavaFX & SWT 2
M [SOLVED]Hinzugefügter JTable+volle Fensterbreite ein AWT, Swing, JavaFX & SWT 3
M [SOLVED]MVC Beispiel von dbac AWT, Swing, JavaFX & SWT 2
M [SOLVED]Automatischer Methodenaufruf? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen


Oben