Componente de pesquisa

11/01/2010

Ola pessoal Gostaria de saber como faço para personalizar um componente de texto em swing
para que fique semelhante ao exibido na figura com o texo file filter? Este componente deve
ser exibido no lado superior do formulário no lugar do JTextField
padrão do Swing. Infelismente não consegui capturar a imagem mas o componente
com o texo file filter exibe um menu suspenso com várias opções de pesquisa quando
clico sobre ele, semelhante ao componente de pesquisa apresentado no canto
superior direito do netBeans de um Ctrl + I para acessá-lo. E quando clico no x no lado direito do componente searchField o texto digitado desaparece.
 
Israel Barbosa

Israel Barbosa

Curtidas 0

Respostas

Henrique Weissmann

Henrique Weissmann

11/01/2010

Oi Israel, bom: vamos por partes. Pra começar, sugiro que você dê uma lida neste artigo: "Adding Auto Completition to Swing ComboBoxes" http://today.java.net/pub/a/today/2007/07/19/adding-auto-completion-to-swing-comboboxes.html O que deve ser executado é o seguinte: no evento keyListener do seu componente, conforme o usuário for digitando o texto, deve ser feita uma busca na base de dados. Esta busca, por sua vez, deve retornar um único campo como resultado. Este único campo deverá alimentar um objeto do tipo List, que, por sua vez, deverá alimentar o conteúdo do seu JComboBox.
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Codigo responsavel pela inicialização dos componentes entre eles o de autoCompletar De uma forma simples este código esta executando o autoCompletar da forma correta. Estou utilizando GlazedLists. Vc quer que eu te evie codigo completo do exemplo? private void initComponents(){ titleLable = new JLabel("Autores:"); autorTable = new ZebraJTable(); autorTable.setModel(TableModels.createAutorTableModel(autorManagerModel.getAutorSelection())); autorTable.setSelectionModel(new SingleListSelectionAdapter(autorManagerModel.getAutorSelection().getSelectionIndexHolder())); ///******************************* List elements = autorManagerModel.getAutorSelection().getList();// This list is synchronized with database. searchComponent = new JComboBox(); AutoCompleteSupport support = AutoCompleteSupport.install(searchComponent, GlazedLists.eventListOf(elements.toArray())); //******************************** newButton = new JButton(autorManagerModel.getNewAction()); editButton = new JButton(autorManagerModel.getEditAction()); removeButton = new JButton(autorManagerModel.getRemoveAction()); }
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Ola Henrique, preciso saber como esta o ondamento do chamado?
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

11/01/2010

Oi Israel, me desculpe pela demora na resposta ok? Bom: não estou conseguindo entender agora qual o problema se o código está funcionando ok. Como posso lhe ajudar daqui pra frente? Quais os pontos nos quais está encontrando dificuldades?
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Eu precisava saber como faço para que apareça tipo um menu suspenso para uma opção de pesquisa ou por id, ou qualquer outro campo da tabela semelhante ao componente de pesquisa do netbeans citado anteriormente. E tambem fazer com que apareça um icone dentro do componente. 
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Eu precisava saber como faço para que apareça tipo um menu suspenso para uma opção de pesquisa ou por id, ou qualquer outro campo da tabela semelhante ao componente de pesquisa do netbeans citado anteriormente. E tambem fazer com que apareça um icone dentro do componente. 
GOSTEI 0
Henrique Weissmann

Henrique Weissmann

11/01/2010

Oi Israel, como assim "um ícone dentro do componente"? Com relação ao menu suspenso, bem: o próprio JComboBox é, na realidade, um menu suspenso com as opções necessárias, não?
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Vou ver se consigo capturar uma imagem para exemplicar mehor.
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Bom dia Henrique Vou especificar melhor o que eu gostaria de fazer: 1 - Observe primeiramente que a seta do componente encontra-se
do lado direito, o oposto ao modo de exibição padrão do
componente e possui um icone de uma lupa o que simboliza
uma pesquisa como na imagem a
seguir:   Note que a impressão que se tem é que o icone parace estar inserido no componente de pesquisa   2 - Observe agora que quando clicko na seta é apresentado uma
espécie de menu suspenso contendo várias opções como:
 - Todas categorias
 - Ações
 - Ir para tipo
 - Opções
 - Repositórios Maven
 - Ajuda  3 - Note que quando uma das opções é selecionada ela fica marcada
com uma bolinha e aparece escrito no componente
pesquisar em + opção selecionada. 4 - Quando realizo uma pesquisa a filtragem ocorre somente pela
opção que foi selecionada. Duvida:
Como proceder para obeter-se o mesmo resultado visual do
componente apresentado, ou seja quais são as etapas para
sua customização? Basicamente consigo fazer aparecer um menu suspenso como na
figura a seguir:   no entanto não consigo colocar um icone para personalizar o
componente. E tambem gostaria que o menu suspenso
aparece não quando o componente ganha o foco e sim quando
o icone é clikado. Sabendo que o NetBeans foi desenvolvido em swing deve
haver uma maneira para isto.      
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/01/2010

Opa ,vou tentar elaborar algo aqui e te passo , soh vou precisar de um pouco de tempo OK ? Já desenvolvi componentes com Swing , porem não neste estilo... vou dar uma olhadinha !!!
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Não tem problema, Fico no aguardo.
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

E então Dyego. Vc conseguiu elaborar algo
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Ola!   Dyego a mesma pergunta deste chamado fiz para o Hugo Vidal Teixeira que ja publicou vários artigos na JavaMagazine e a respos ta que obtive foi a seguinte:  você deve criar uma classe que herda de JTextField e implementar aqueles detalhes. Você deve sobrescrever o método que pinta o componente para conseguir aquele efeito. O vc me diz a respeito? 
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/01/2010

Na realidade estou fazendo um COMPOSITE COMPONENT...

Ou seja , um componente que é a composição de outros... assim fica mais facil de entender e o resultado final mais legal... e independente !

Guentae que já subo o componente por disco virtual !

GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Sem problemas, como disse não tenho pressa. Na verdade havia feito a mesma pergunta deste chamado ao Hugo Vidal Teixeira antes de abri-lo e somente agora que ele me respondeu.   Pela atenção muito obrigado!  
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/01/2010




http://video.devmedia.com.br/discovirtual/202707/Componente.rar


Está ai o componente , feito de uma forma a não precisar ficar reescrevendo codigo de PAINT , é um componente FEITO da composicao de outros...

o exemplo é meio auto explicativo , qualquer coisa me avise !

GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

O componente ficou bom, mas na verdade o efeito que gostaria de obter é aquele que mencionei nos posts anteriores vou novamente exemplificar com algumas imagens:   imagem 1     imagem 2     imagem 3       Observe que todas elas possuem algo em comum, existe um icone de uma lupa que parece estar inserido dentro do JTextField que ao ser clicada exibe um popup com várias opções.     Já o exemplo que vc desenvolveu ficou legal mas observe que é bem nítido que tenho dois componentes um que é um botão que ao ser clicado exibe um popup, e outro que é o JTextField para digitação do valor a ser pesquisado e mesmo se posicionar os dois bem proximos ainda assim não fica parecido com os componentes acima . Ao contrário dos componentes listados acima que é um composto de vários componentes mas parecem ser um único componente.       Na realidade o que gostaria de fazer era desenvolver um componente com as mesmas caracteristicas da imagem 1 observe que este componente possui além da imagem de uma lupa no lado esquerdo possui tambem uma imagem de um x no lado direito e quando o usuário escreve algo na caixa de texto ele fica habilitado e quando este x é clicado o texto que o usuário escreveu é apagado e o x desabilita.   Podemos começar com a parte da lupa e depois evoluir para a parte do x.    O que vc me diz?   Sabendo que todas as imagens acima foram tiradas de ferramentas feitas em swing deve haver uma maneira de fazer isto.   Não deve?   O código fonte do netBeans não é openSource? Se sim, não é possível olhar o código fonte e ver como aquele componente foi desenvolvido?   Acredito que desenvolver um componente com as características citadas acima(como da imagem 1) não deve ser nada fácil, mas não impossível. Peço apenas que não me deixe sozinho nesta tarefa difícil! Se for necessário abro outro chamado, é só me avizar.              
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/01/2010

Realmente , se for fazer algo neste nivel voce realmente vai precisar alterar bem o componente padrao, um JTextField ou coisa parecida...

Infelizmente este tipo de alteração mais agressiva não tenho condicoes de fazer,

Acho que se trabalharmos bem este componente que fiz a voce ele pode ficar bem mais perto da sua opcao real... talez trocar alguns icones , agrupar mais... entende  ? Alterar o metodo PAINT do Jtextfield eh o mais facil , manter combos e opcoes comeca a tornar a coisa toda um problema...


Espero poder ter ajudado.
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Então vamos esquecer o método as combos e opções Seria possível somente fazer aparecer o icone de lupa dentro do componente, sem colocar opções quando o mesmo é clicado? 
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/01/2010

Eu já fiz algo parecido uma vez , vou achar aqui nas minhas tralhas , fazer um exemplo e te enviar ok ? ]
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

Blz, fico aguardando. 
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/01/2010

Opa , veja se isso já te ajuda:

http://video.devmedia.com.br/discovirtual/202707/TestePaint.rar
GOSTEI 0
Israel Barbosa

Israel Barbosa

11/01/2010

É isso ai mesmo, ja ajuda bastante!!!   Muito obrigado!!!
GOSTEI 0
Dyego Carmo

Dyego Carmo

11/01/2010

Muito Obrigado por utilizar o Suporte Devmedia

Estarei fechando este chamado

GOSTEI 0
POSTAR