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