Tem como fazer combobox.setReadOnly(true)?

MUDANCA DE TITULO NO TOPICO… pois nao consegui setar ReadOnly somente para JComboBox…

Ola,

Estou precisando deixar varios componentes read-only. Nao pode ser setEnabled(false) pois o usuario pode ainda navegar dentro do campo. Somente nao pode alterar nada nele.

Na API JDK 1.5 do Swing/JComponent e AWT/Component, nao achei nada que faca isso.

JTextField field = new JTextField();
field.setEditable(false);

[]'s

Ola,

Eu ja havia tentado o setEditable, mas ele deixa o componente "pior" que o setEnabled. Fica tudo cinza com a bordinha azul do componente. Eu gostaria que ele nao mexesse visualmente no componente, mas que nao permitisse ao usuario digitar nada dentro dele, como em outras ferramentas como o Delphi (que tem ReadOnly=true).

O meu codigo esta assim, mas nao funciona nem no JTextField (e seus filhos) nem no JComboBox (e seus filhos):

    for (i = 0; i < complist.size(); i++) {
      comp = (JComponent) complist.get(i);
        if (comp instanceof JTextField ||
          comp instanceof JFormattedTextField ||
          comp instanceof JPasswordField ||
          comp instanceof JTextArea)
          ((JTextComponent) comp).setEditable(false);
        else if (comp instanceof JTextLookupCombo ||
          comp instanceof JComboBox)
          ((JComboBox) comp).setEditable(false);
        else if (comp instanceof JTextDateChooser)
          ((JTextDateChooser) comp).getTextField().setEditable(false);
    }

com relação à aparência do componente, pelo menos do JTextField, dá pra colocar o background branco…

[]'s

Acabei de fazer isso. Pelo menos na aparencia ficou menos pior. Apenas teve o problema do “cursor” nao ficar mais piscando, para que o usuario saiba em que campo se encontra em cada momento. Neste caso, como marquei com azul o campo, melhorou isso tambem.

Agora estou com problema no JComboBox, pois ele usa o setEnabled para permitir digitar no componente ou nao, e nao para a questao de mudar de valor atraves da setinha. Tem algum jeito de nao deixar mudar? Somente na mao com algum evento onChange?

Tentei usar o comboboxES.setPopupVisible(false) mas nao deu certo. O Java nem ligou para o metodo…

Ola Edilmar

Eu nao estou entendendo direito, o seu combobox alem de escolher o valor em uma lista ele deixa voce mudar o valor na mao?
Eu to fazendo uma aplicacao aqui e apenas adicionei combo boxes e ele nao deixa mudar nao

JComboBox jcb01 = new JComboBox();

normal, depois soh setei o setbounds dele e e adicionei ele ao container

É o segte: tenho uma tela cheia de campos, onde o usuario somente podera altera-los apos clicar no botao Alterar. Enquanto isso, todos os campos devem ficar readonly. Ja resolvi para JTextField, mas para JComboBox, mesmo sem clicar no Alterar, o usuario consegue clicar na setinha do JComboBox e escolher outro item. A opcao setEnabled(false) nao pode ser usada pois o usuario pode querer consultar a lista do JComboBox, e a opcao setEditable(false) tambem nao serve, pois o usuario consegue mudar pela setinha, sem edicao direta. O que precisaria é que, mesmo que o usuario quisesse escolher outra opcao, ao fechar o popup, voltasse o valor antigo, ou seja, um setReadOnly(true).

no seu caso então poderia utilizar o