[Resolvido] FindNearRest em java, existe?

8 respostas
yfalbino

no delphi existe uma função que chama findNearRest, que enquanto o usuario digita uma palavra, a função busca letra por letra…

gostaria de saber se existe alguma função assim no java, ou se existe alguma forma de fazer com que o programa busque letra por letra da palavra digitada pelo usuario

me desculpem se postei no lugar errado, este é meu primeiro post…

desde já agradeço !

PS: se existe alguma forma de fazer isso em tempo de excução eu agradeçeria

8 Respostas

ViniGodoy

Seu programa é web, desktop ou roda no prompt de comando?

yfalbino

programa é para desktop

ja procurei muito por isso, mas nao achei nada relacionado

yfalbino

eu entendi +/- o que voce quiz dizer, desculpe, programo em java a apenas 2 anos, sou novato ainda, voce teria um codigo pra eu testar aqui e pra esclarecer melhor minha duvida ?

Obrigado pela resposta

yfalbino

galera, consegui fazer, nao da forma que eu queria, mas consegui, fiz por uma conexão com o mysql, consultando os dados do banco

se alguem tiver a mesma duvida, ou quiser fazer pelo banco da mesma forma que eu fiz, o codigo é esse:

int x = 0; javax.swing.table.DefaultTableModel modelo = (javax.swing.table.DefaultTableModel) Tabela.getModel(); modelo.setNumRows(0); Connection con; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection("jdbc:mysql://localhost:3306/seuBanco", "root", "suaSenha"); System.out.println("conexão realizada com sucesso."); Statement stm = con.createStatement(); String texto = String.valueOf(Text1.getText()); ResultSet rs = stm.executeQuery("select * from suaTabela where nome like '%"+texto+"%'"); while (rs.next()) { modelo.addRow(new Object[]{"", "", ""}); String t = String.valueOf(rs.getString("nome")); Tabela.setValueAt(t, x, 0); x++; } con.close(); } catch (ClassNotFoundException | SQLException ex) { System.out.println(ex); }

obrigado pelas respostas…

yfalbino

Muito Obrigado, o topico que voce mandou funcionou perfeitamente para o que eu queria

pra quem quizer, vou deixar a imagem do codigo para isto, Obrigado ai galera


WellingtonRamos

Infelizmente terá que construir.
Aqui vejo dois caminhos, um deles é pegar uma JComboBox editável e implementar a regra durante a digitação. Outro caminho é através de um JTextField que, durante a digitação abre um Popup.

Eu não recomendo o controle através de eventos, no caso do JTextField, fiz o controle implementando uma classe do tipo Document e fornecendo a mesma para o JTextField.

Na combo, não cheguei a implementar mas pode-se seguir mais ou menos o mesmo sistema (quando a combo está editável, se não me engano, usa internamente uma JTextField)

WellingtonRamos

yfalbino:
eu entendi +/- o que voce quiz dizer, desculpe, programo em java a apenas 2 anos, sou novato ainda, voce teria um codigo pra eu testar aqui e pra esclarecer melhor minha duvida ?

Obrigado pela resposta

Putz… eu vi sua mensagem mas não dava pra responder na hora e esqueci de responder depois… desculpe-me

Então, não tenho mais o código agora, vou ver se monto algo e posto aqui (nem que seja pra conhecimento).

Vi que você usou um Table mas como exibiu ela na tela? Deixou logo abaixo do campo (fixo)? Ou fez ser exibido de acordo com alguma regra?

De qualquer forma, eu vou colocar aqui um conselho que coloquei também em outro post e que faz sentido aqui:
http://www.guj.com.br/java/256085-consulta-java--textfield--datagrid#1550179

eu mesmo:
Imagine consultar uma palavra com 10 caracteres representaria 10 consultas à base (imagine que seja um sistema rodando em diversas máquinas, como PDVs).

Eu definiria um número mínimo de caracteres (3 por exemplo), faria uma única consulta e, com esses dados, manipularia a lista para obter apenas o que necessito e, caso os três primeiros caracteres mudem, aí eu faço uma nova consulta.

WellingtonRamos

Era mais ou menos isso que eu estava falando.

É só um draft (ainda tem alguns bugs) mas acho que é isso que eu entendi que você queria.

package popup;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class MainPopup extends JFrame {
	
	public MainPopup() {
		setPreferredSize(new Dimension(250,100));
		setLayout(new FlowLayout());
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		initialize();
		
		pack();
	}

	private void initialize() {
		JTextField field = new JTextField(20);
		
		field.setDocument(new MyDocument(field));
		
		add(field);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			@Override
			public void run() {
				new MainPopup().setVisible(true);
			}
		});
	}
}

class MyAction extends AbstractAction {
	
	private JPopupMenu menu;

	public MyAction(JPopupMenu menu, String param) {
		this.menu = menu;
		
		putValue(NAME, param);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		menu.setVisible(false);
		String value = getValue(NAME).toString();
		((JTextField)menu.getInvoker()).setText(value);
	}
}

class MyDocument extends PlainDocument {
	
	JPopupMenu menu;
	private JTextField field;
	
	public MyDocument(JTextField field) {
		
		menu = new JPopupMenu();
		menu.setAutoscrolls(true);
		menu.setFocusable(false);
		
		JPanel scrolledPanel = new JPanel();
		scrolledPanel.setLayout(new FlowLayout());
		scrolledPanel.setPreferredSize(new Dimension(260, 200));
		
		this.field = field;
	}
	
	@Override
	public void insertString(int offs, String str, AttributeSet a)
			throws BadLocationException {
		
		doWhatYouNeed();
		
		menu.show(field, field.getLocation().x, field.getLocation().y + 14);
		super.insertString(offs, str, a);
	}

	private void doWhatYouNeed() {
		for(int i = 0; i < 10; ++i) {
			JMenuItem item = new JMenuItem(new MyAction(menu, "Item " + i));
			item.setMinimumSize(new Dimension(50, 16));
			menu.add(item);
		}
	}
	
	@Override
	public void remove(int offs, int len) throws BadLocationException {
		
		super.remove(offs, len);
		System.out.println(getLength());
		if(getLength() == 0) {
			menu.setVisible(false);
		}
	}
	
}
Criado 25 de fevereiro de 2013
Ultima resposta 1 de mar. de 2013
Respostas 8
Participantes 3