private void attachListeners() {
        _raceListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                Object index = _raceBox.getSelectedItem();
                for (BaseRace br : Character.RACES) {
                    if (br.getName().equals(index.toString())) {
                        _character.setRace(br);
                    }
                }
                setPreferredClasses();
            }
        };

        _classListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                Object index = _classBox.getSelectedItem();
                for (BaseClass bc : Character.CLASSES) {
                    if (bc.getName().equals(index.toString())) {
                        _character.setClass(bc);
                    }
                }
                setPreferredRaces();
            }
        };

        _classBox.addActionListener(_classListener);
        _raceBox.addActionListener(_raceListener);

        _classLock.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                _classBox.setEnabled(_classLocked);
                _classLocked = !_classLocked;
                if (_classLocked) {
                    _classLock.setText("Unlock");
                } else {
                    _classLock.setText("Lock");
                }
            }
        });
        _raceLock.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                _raceBox.setEnabled(_raceLocked);
                _raceLocked = !_raceLocked;
                if (_raceLocked) {
                    _raceLock.setText("Unlock");
                } else {
                    _raceLock.setText("Lock");
                }
            }
        });

        _generatorBox.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                int index = _generatorBox.getSelectedIndex();
                BaseGenerator g = Character.GENERATORS[index];
                _character.setGenerator(g);
            }
        });
        _levelSpinner.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent ce) {
                _character.setLevel(Integer.parseInt(_levelSpinner.getValue().toString()));
            }
        });
    }