[js]
public class RomeChar {
    int wert = 0;
    char zeichen = ' ';
    public RomeChar(int wert, char zeichen) {
        this.wert = wert;
        this.zeichen = zeichen;
    }
}
[/js]
[js]import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Rome {
    
    public RomeChar RomeArray[] = new RomeChar[7];
    
    //Konstruktor
    public Rome() {
        initRomeChars();
    }
    
    //Methode zur initialisierung der möglichen Römischen Zeichen mit Wert und Zeichen
    public void initRomeChars() {
        RomeArray[0] = new RomeChar(1, 'I');
        RomeArray[1] = new RomeChar(5, 'V');
        RomeArray[2] = new RomeChar(10, 'X');
        RomeArray[3] = new RomeChar(50, 'L');
        RomeArray[4] = new RomeChar(100, 'C');
        RomeArray[5] = new RomeChar(500, 'D');
        RomeArray[6] = new RomeChar(1000, 'M');
    }
    
    //Methode zur Berechnung der Dezimalzahl
    public int toDezimal(String param) {
        char uebChar[] = param.toCharArray();
        int zahl = 0, index = 0, indexBack = 0, right = 0, left = 0;    
        for (int i = 0; i<=uebChar.length; i++) {
            indexBack = index;
            if (indexBack < uebChar.length) {
                left = getWert(uebChar[indexBack]);
                if (left == 0) break;
            }
            else break;
            if (indexBack+1 < uebChar.length) right = getWert(uebChar[indexBack+1]);
            else {
                zahl += left;
                break;
            }
            if (left >= right) zahl+=left;
            else {
                zahl += right-left;
                index++;
            }
            index++;
        }
        return zahl;
    }
    //Methode um den Wert zum Char zu bekommen
    public int getWert (char index) {
        for (RomeChar ilt : RomeArray) {
            if(ilt.zeichen == index) {
                return ilt.wert;
            }
        }
        //Fehler-Dialog bei ungültigem Zeichen
        JOptionPane.showMessageDialog(new JFrame(), "Ungültiges Zeichen: "+index, "Error", JOptionPane.ERROR_MESSAGE);
        return 0;
    }
    
}
[/js]
[js]import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class Dialog extends JFrame implements ActionListener {
    
    Rome romeInt = new Rome();
    static JTextField dez = new JTextField();
    JTextField rom = new JTextField();
    JButton toDezimal = new JButton("toDezimal");
    JButton reset = new JButton("reset");
    JPanel buttons = new JPanel();
    JPanel textPanel = new JPanel();
    
    public Dialog() {
        initButtons();
        initText();
        initThis();
    }
    
    public void initThis() {
        this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
        this.setTitle("Römisch - Dezimal - Umrechner");
        this.setSize(300,150);
        this.setLocation(200,200);
        this.setLayout(new BorderLayout());
        this.add(textPanel, BorderLayout.NORTH);
        this.add(buttons, BorderLayout.SOUTH);
        this.setVisible(true);
    }
    
    public void initText() {
        rom.setText("Römischer Wert");
        dez.setText("Dezimalwert");
        textPanel.setLayout(new BorderLayout());
        textPanel.add(rom, BorderLayout.NORTH);
        textPanel.add(dez, BorderLayout.SOUTH);
    }
    public void initButtons() {
        toDezimal.setActionCommand("rome");
        toDezimal.addActionListener(this);
        reset.setActionCommand("reset");
        reset.addActionListener(this);
        buttons.setLayout(new GridLayout(0,1));
        buttons.add(toDezimal);
        buttons.add(reset);
    }
    
    @Override
    public void actionPerformed(ActionEvent arg0) {
        String cmd = arg0.getActionCommand();
        if (cmd.equals("rome")) {
            dez.setText(""+romeInt.toDezimal(rom.getText()));
        }
        if (cmd.equals("reset")) {
            dez.setText("");
            rom.setText("");
        }
    }
    
    public static void main(String args[]) {
        Dialog neu = new Dialog();
    }
}
[/js]