private void addFeatDialog() {
        JLabel nameLabel = new JLabel("Feat name");
        nameLabel.setAlignmentX(Component.LEFT_ALIGNMENT);

        JTextField nameField = new JTextField();
        nameField.setAlignmentX(Component.LEFT_ALIGNMENT);

        JLabel descLabel = new JLabel("Feat description");
        descLabel.setAlignmentX(Component.LEFT_ALIGNMENT);

        JTextArea descField = new JTextArea();
        descField.setColumns(40);
        descField.setRows(30);
        descField.setLineWrap(true);
        descField.setAlignmentX(Component.LEFT_ALIGNMENT);

        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        panel.add(nameLabel);
        panel.add(nameField);
        panel.add(descLabel);
        panel.add(descField);

        boolean showAgain = true;
        do {
            int option = JOptionPane.showConfirmDialog(null, panel, "New Feat", JOptionPane.OK_CANCEL_OPTION);
            if (option == JOptionPane.OK_OPTION) {
                String newFeatName = nameField.getText();
                String newFeatDesc = descField.getText();

                Feat newFeat = new Feat();
                newFeat.setName(newFeatName);

                if (newFeatDesc == null || newFeatDesc.equals("")) {
                    newFeat.setDescription("No description provided.");
                } else {
                    newFeat.setDescription(newFeatDesc);
                }

                if (newFeat.getName() == null || newFeat.getName().equals("")) {
                    JOptionPane.showMessageDialog(this.getTopLevelAncestor(), "New feat must have a name.", "Error", JOptionPane.ERROR_MESSAGE);
                } else if (feats.contains(newFeat)) {
                    JOptionPane.showMessageDialog(this.getTopLevelAncestor(), "New feat must have a unique name.", "Error", JOptionPane.ERROR_MESSAGE);
                } else {
                    feats.add(newFeat);
                    updateParent();
                    showAgain = false;
                }
            } else {
                showAgain = false;
            }
        } while (showAgain);
    }