Use user-selected content in ComboBox as key (map) in enum class

0

Beauty, people? I'm having a hard time. That's exactly what the title says. Code containing cbox:

JFileChooser fc = new JFileChooser(new File(pastaPadrao));
String[] siglaStrings = { "Selecione", "CIC", "CISEI", "GERMEM" };
public  JComboBox<String> siglaList = new JComboBox<String>(siglaStrings);
int teste;

public TelaInicial() {
    super("Selecionar um Caso de Uso para validação");
    this.setLocation(new Point(600, 400));
    Container container = getContentPane();
    GridBagLayout layout = new GridBagLayout();
    container.setLayout(layout);
    container.add(siglaList);

    JButton btnSelecionarCasoUso = new JButton("Selecionar Caso de Uso");

    btnSelecionarCasoUso.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            fc.setPreferredSize(new Dimension(1000, 600));

            int res = fc.showOpenDialog(null);

            teste = siglaList.getSelectedIndex();
            if (res == JFileChooser.APPROVE_OPTION && teste != 0) {
                File arquivo = fc.getSelectedFile();
                ResultadoQa resultadoQa = new ResultadoQa(arquivo.getName());
                resultadoQa.setVisible(true);
                resultadoQa.setSize(1200, 800);
                resultadoQa.setLocation(new Point(100, 50));
                resultadoQa.setResultado(getResultadoQa(arquivo));
            } else {
                JOptionPane.showMessageDialog(null, "Você não selecionou nenhum arquivo\n ou não selecionou a sigla do CSU.");
            }   
        }
    });

    container.add(btnSelecionarCasoUso);

    setSize(400, 200);
    setVisible(true);
}

Enum class with keys:

public enum TipoItem {

/*Itens Genéricos*/
REGRA_NEGOCIO_GENERICA     ("Regra de Negócio Genérica", "(RNEG).(\d+)"),
REGRA_VALIDACAO_GENERICA   ("Regra de Validação Genérica", "(RVAG).(\d+)"),
FLUXO_ALTERNATIVO_GENERICA ("Fluxo Alternativo Genérico", "(FAG)(\d+)"),
FLUXO_EXCECAO_GENERICA     ("Fluxo de Exceção Genérico", "(FEG)(\d+)"),
MENSAGEM_GENERICA          ("Mensagem Genérica", "(MSGG).(\d+)"),

SIGLA                      ("Sigla do CSU", "(siglaLista)"), //*** --> tem que ser recebido na tela inicial junto com a escolha do doc
REGRA_NEGOCIO              ("Regra de Negócio", "(RNE).(\d+).(\d+)"),
REGRA_VALIDACAO            ("Regra de Validação", "(RVA).(\d+).(\d+)"),
REQUISITO_FUNCIONAL        ("Requisito Funcional", "(RF).(\d+)"),  
REQUISITO_NAO_FUNCIONAL    ("Requisito Não Funcional", "(RNF).(\d+)"),
MENSAGEM                   ("Mensagem", "(MSG).(\d+).(\d+)"),
FLUXO_PRINCIPAL            ("Título do Fluxo Principal", "(Fluxo Principal)"),
FLUXO_ALTERNATIVO          ("Fluxo Alternativo", "(FA)(\d+)"),
FLUXO_EXCECAO              ("Fluxo de Exceção", "(FE)(\d+)"),
PONTO_INCLUSAO             ("Ponto de Inclusão", "(PI).(\d+)"),
PONTO_EXTENSAO             ("Ponto de Extensão", "(PE).(\d+)"),
ATOR                       ("Ator", "((A)|(a))(tor)(\s)"),
COMPLEXIDADE               ("Complexidade", "((Baixa)|(Média)|(Alta))"),
PRIORIDADE                 ("Prioridade", "((Opcional)|(Desejavel)|(Essencial))"),

MSG_FE                     ("MSG dento do Fluxo de Exceção na respectiva oredem", "(O sistema exibe a MSG)"),

SAAA                       ("SAAA", "(SAAA)"),
INTERFACE                  ("Interface", "((I)|(i))(nterface)(\s)"),
TERMOINGLES                ("Termos em Inglês", ""),
CAMPO                      ("Campos", "");


private final String descricao;
private final String expressaoRegular;

TipoItem(String descricao, String expressaoRegular){
    this.descricao = descricao;
    this.expressaoRegular = expressaoRegular;
}

public String getDescricao() {
    return descricao;
}

public String getExpressaoRegular() {
    return expressaoRegular;
}

}

I'm using HashMap to set some keys, so what I want is to transform the index string selected by the user into a key, so my program will return me the amount of occurrence of that String in doc (word) . That is, I just want to add one more key, just like it's a Scan, not a constant already defined in the enum class (where the keys are). Thank you so much to anyone who tries to help.

    
asked by anonymous 25.01.2017 / 20:01

1 answer

0

Try the following: first, create the renderer:

class TipoItemRenderer extends BasicComboBoxRenderer {
    @Override
    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

        if (value != null) {
            TipoItem tipoItem = (TipoItem) value;

            if (index == -1) {
                setText("" + tipoItem.ordinal());
            } else {
                setText(tipoItem.getDescricao());
            }
        }

        return this;
    }
}

Then,

comboBox = new JComboBox(TipoItem.values());
comboBox.addActionListener(this); // Vai chamar o método actionPerformed(ActionEvent)
comboBox.setRenderer(new TipoItemRenderer());

Finally, create the event method:

public void actionPerformed(ActionEvent e) {
    JComboBox comboBox = (JComboBox) e.getSource();
    TipoItem tipoItem = (TipoItem) comboBox.getSelectedItem();

    System.out.println(tipoItem.ordinal() + " - " + tipoItem.getDescricao());
}
    
25.01.2017 / 20:25