Hi,
ich hab mir als Langzeitaufgabe heute vorgenommen ein kleines Terminalprogramm zu programmieren. Eine funktionierende GUI in der ich ein Kommando eingeben kann, welches bei druck auf Enter ausgelesen wird, habe ich schon.
Nur scheitere ich nun an einem ziemlichen Kernpunkt. Und zwar weiß ich nicht wie ich nun mit Hilfe der Eingabe ein Kommando ausführen lassen kann. Ich könnte das ganze zwar so machen, dass ich alle vorhandenen Kommandos manuell in ein Array eingebe, überprüfe, mit welchem Fach die Eingabe übereinstimmt und dann über ein Switch-Case das entsprechende Kommando ausführe, aber das wäre ja ziemlich unflexibel und bei wachsender Anzahl an Kommandos würde das Programm immer langsamer werden.
Ich habe mir mal die Sourcecodes von diversen Open Source Java Terminals angesehen und bemerkt, dass dort die Kommandos in Hashtables ([c]java.util.Hashtable[/c]) gespeichert werden. Nur habe ich keine Ahnung, was das nun ist und wie man damit arbeitet (Aus der Dokumentation werde ich auch nicht schlau).
Am Ende hätte ich am liebsten pro Kommando eine Klasse (Die sich möglicherweise von einer Klasse "Command" o.Ä. ableiten). Also wie realisiere ich das?
Hier mal mein Code:
ich hab mir als Langzeitaufgabe heute vorgenommen ein kleines Terminalprogramm zu programmieren. Eine funktionierende GUI in der ich ein Kommando eingeben kann, welches bei druck auf Enter ausgelesen wird, habe ich schon.
Nur scheitere ich nun an einem ziemlichen Kernpunkt. Und zwar weiß ich nicht wie ich nun mit Hilfe der Eingabe ein Kommando ausführen lassen kann. Ich könnte das ganze zwar so machen, dass ich alle vorhandenen Kommandos manuell in ein Array eingebe, überprüfe, mit welchem Fach die Eingabe übereinstimmt und dann über ein Switch-Case das entsprechende Kommando ausführe, aber das wäre ja ziemlich unflexibel und bei wachsender Anzahl an Kommandos würde das Programm immer langsamer werden.
Ich habe mir mal die Sourcecodes von diversen Open Source Java Terminals angesehen und bemerkt, dass dort die Kommandos in Hashtables ([c]java.util.Hashtable[/c]) gespeichert werden. Nur habe ich keine Ahnung, was das nun ist und wie man damit arbeitet (Aus der Dokumentation werde ich auch nicht schlau).
Am Ende hätte ich am liebsten pro Kommando eine Klasse (Die sich möglicherweise von einer Klasse "Command" o.Ä. ableiten). Also wie realisiere ich das?
Hier mal mein Code:
Java:
package com.damarus;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class JShell extends JPanel implements KeyListener {
private static final long serialVersionUID = 1L;
JTextField field = new JTextField();
JEditorPane editor = new JEditorPane();
public JShell() {
super(new BorderLayout());
// Content
editor.setEditable(false);
editor.setBackground(Color.LIGHT_GRAY);
this.add(editor, BorderLayout.CENTER);
field.addKeyListener(this);
this.add(field, BorderLayout.PAGE_END);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
// Wenn Enter gedrückt wird, wird die Eingabe in
// editor übernommen und field geleert
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
editor.setText(editor.getText() + field.getText() + "\n");
field.setText("");
}
}
public static void main(String[] args) {
// GUI starten
setUp();
}
public static void setUp() {
// Frame
JFrame frame = new JFrame("JShell");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 300);
JPanel panel = new JShell();
frame.setContentPane(panel);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}