Jump to content

ComboBox


Hydr0xygen
 Share

Recommended Posts

Olá 😉

nós em aplicações informáticas já demos as combo boxes mas só mesmo o básico que é adicionar os items às mesmas...

Gostaria de saber se é possível fazer isto:

20uu8hg.jpg

o que queria era que à medida que mudasse a opção na combo box mudasse a imagem correspondente à mesma no rectângulo onde diz image...

Já agora o projecto tá dividido em dois panéis, o da esquerda e o da direita...

Abraço 😉

Link to comment
Share on other sites

Sim é possível, verificar a documentação da classe JComboBox e vê os eventos. Dependendo de como queres fazer, existem vários eventos que podes usar. Tens de implementar o método que pegue no valor da caixa e que altere a imagem de acordo.

qual é o método?

já agora Knitter podes me esclarecer mais uma dúvida?

Eu criei uma nova classe (adicionar) que é accionada através do menubar que permitisse adicionar um item à combobox.. sabes se isto é possivel ?

Link to comment
Share on other sites

Eu criei uma nova classe (adicionar) que é accionada através do menubar que permitisse adicionar um item à combobox.. sabes se isto é possivel ?

Não percebi a pergunta. Criaste uma classe que é accionada, como assim accionada?

Para adicionar e remover elementos da caixa será mais simples usar um DefaultComboBoxModel como modelo da caixa e adicionar e remover elementos ao modelo.

Quanto ao método, estava a referir-me ao evento que quiseres usar. Se usares o evento actionPerformed, então tens de implementar o método que faça a acção associada a esse evento.

Link to comment
Share on other sites

boa tarde

o que eu tenho até agora é isto

27wuelh.jpg

O programa é:

tenho a janela divida em dois panéis, o da esquerda e o da direita.

O da esquerda tem uma combobox (ainda não criada) onde tem nomes de aviões. na esquerda à medida que eu escolho um avião da combo aparece a sua informação em textfields...

tenho esta opção de adicionar os novos aviões e eu quero que ele actualize a combo box e os respectivos textfields. sei que é um pouco confuso :S

De ínicio tenho na combo box 4 avioes... ao seleccionar 1 aparece nome, velocidade , capacidade e foto... esta info está no painel da direita dentro de textfields que irá permitir que eu altere a sua informação. Em baixo dos txt fields terei um botão para que já não seja possivel alterar o conteúdo dos txt fields acho que é um comando : disable qualquer coisa já não me lembro. Sendo que tenho esta info numa nova classe (das velocidades nomes etc) criei uma nova opção para adicionar um avião caso eu queira... ele adiciona o nome à combobox e à minha base de dados os dados do avião...

é um pouco confuso e se calhar estou a confundir muito :x não me sei explicar muito bem...

desculpem

Link to comment
Share on other sites

Como disse, para adicionar e remover elementos de uma combobox podes usar a classe DefaultComboBoxModel. Se definires o modelo da tua caixa com uma instância desta classe, podes adicionar e remover elementos da instância que automaticamente a caixa vai ser actualizada.

Para que possas colocar as informações nos campos de texto quando se escolher um elemento da caixa tens de adicionar um actionListener e implementar o código da acção. Em princípio não será mais que ir ver qual é o valor seleccionado, pesquisar esse valor nos teus dados e apresentar as informações necessárias dentro dos campos de texto.

Exemplo da utilização de combobox, retirei o código de um projecto que tinha aqui no IDE por isso não vai ter muita lógica já que tive de remover grande parte do código extra:


private DefaultComboBoxModel cbmodel;
cbmodel = new DefaultComboBoxModel();

jcbxGroup = new JComboBox(); //Instanciar a caixa
jcbxGroup.addActionListener(/*colocar aqui a classe que implementa a interface ActionListener*/);
jcbxGroup.setModel(cbmodel); //definir o modelo a usar

//Adicionar elementos à caixa de selecção
cbmodel.addElement(v);//ao adicionar elementos (e remover) ao modelo, a caixa é actualizada em conformidade automaticamente

Podes usar uma classe anónima para implementar o evento actionListener, ex:

jcbxGroup.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            //código para actualizar os campos de texto
            //o atributo "e" possui alguns métodos úteis
        }
});

Podes ver utilização de caixas de combinação em http://java.sun.com/docs/books/tutorial/uiswing/components/combobox.html

Link to comment
Share on other sites

http://paste.org/pastebin/view/13013

tenho isto até agora mas estou a ter um problema:

ay6a7b.jpg

a informação não me está a aparecer dentro do textfield na sei porquê :S

apenas o nome mesmo assim tá mal porque aparece Nome:Airbus dentro do txtfield quando quero que apareça apenas o Airbus :S

já agora desculpa por ter mandado pm sobre o background, erro meu nao pesquisei 😕

Link to comment
Share on other sites

O elemento que estás a introduzir dentro do modelo da caixa tem o método toString implementado?

Uma JComboBox apenas sabe como representar texto e ícones, se colocares lá outro objecto é necessário que esse objecto é implemente o método toString com a representação de texto que é para aparecer.

Se não for esse o caso, podes colocar a classe Aviao para ver como está?

Link to comment
Share on other sites

Knitter já conseguimos por para a informação aparecer dentro das Textfields, mas nos queriamos que quando abrissemos o programa e na combobox está na opcçao ("Escolha um avião") aparecesse uma mesagem de aviso a dizer para escolher uma opcçao válida, mas queriamos que as textfields desaparecessem...

....

desculpa o código tao extenso 😉 (provavelmente tem aí muito codigo desnecessario)

Link to comment
Share on other sites

Se precisarem de colocar mais código longo usem o pastbin, o P@P tem um em http://paste.portugal-a-programar.org

Se querem isso no arranque da aplicação, basta criarem os campos escondidos inicialmente. Depois, alterem o método que trata do evento actionListener para contemplar esse vosso caso.

Para esconder os elementos, na maior parte dos casos, um simples setVisible(false) resolve o problema. No entanto surge a pergunta: têm mesmo de esconder os campos? Não seria mais simples e mais útil para quem usa o programa ver os campos no local mas tendo os campos inactivos?

Verifiquem a documentação da classe JComboBox, tem tudo o que precisam bem documentado. Atenção que os nomes de classes em Java começam com maiúscula e outra pergunta, porque é que criaram uma classe só para adicionar um elemento ao menu?

Bem, tenho tentando não vos fazer o trabalho 😉, vejam a documentação com cuidado que muito do que precisam fazer está lá explicado, quer na documentação oficial das classes quer no tutorial que coloquei.

Link to comment
Share on other sites

O JFileChooser dá-vos o ficheiro que foi seleccionado, basta colocarem esse ficheiro como o ícone de uma JLabel.

Não me lembro do código de cor mas creio que a classe ImageIcon tem um método que aceita um File, que vos é dado pelo método getSelectedFile do JFileChooser, se criarem um ImageIcon com esse ficheiro podem usar o método setIcon da JLabel para definir a imagem.

Não sei se será necessário adaptar o ImageIcon a um Icon, mas a classe tem um método para fazer isso.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.