Use user-selected content in Combobox as key (map) in Enum class

Asked

Viewed 62 times

0

All right, you guys? With a difficulty. That’s exactly what the title says. Code containing the 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 am using Hashmap to define some Keys, so, what I want is to transform the string of the index selected by the user into a key, so my program will return me the amount of occurrence of this string in doc (word). That is, I just want to add one more key, only it’s like a Scan, not a constant already defined in class Enum (where the keys are). Thank you so much for anyone who tries to help.

1 answer

0

Try the following: first, create the redenderer:

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;
    }
}

So, does the combobox:

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

Finally, creates 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());
}
  • You need a comboboxmodel for this to work. Nderer alone presumes that a model is treating the type of object Typoitem, without it, the Renderer will never receive a type object.

  • I couldn’t test it, but with that answer you should get where you need to go.

  • It was not me who asked the question. It was just a tip to complete the answer, pq only with Nderer will not work, need Combomodel also.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.