Teclado T9 (text on 9 keys)

Boa Noite a Todos

Estou iniciando em java, e estou afim de fazer um teclado T9, alguém já fez algum ou tem algum material para que eu possa intender como esse teclado funciona?
quero fazer uma interface no netbeans e usar uma base de 100 palavras para testar.
estava pensando em usar uma ENUM para as palavras porem não sei se é o mais indicado.
espero que alguém possa me ajudar.

Obrigado.

Não tenho como testar, mas vê esse projeto:

http://code.google.com/p/t9-keyboard-for-pc/

Oii tentei abrir o seu link, infelizmente não me trouxe nada :frowning:

[quote=Marcelo de Andrade]Não tenho como testar, mas vê esse projeto:

http://code.google.com/p/t9-keyboard-for-pc/[/quote]

Boa Noite

Obrigado pela ajuda, porem não consegui utilizar seu link

Para tentar esclarecer melhor o que eu pretendo fazer vou descrever um poco da minha ideia logica de como o teclado t9 deveria funcionar
como cada palavra tem ‘x’ letras associadas poderia percorrer as palavras que possuo verificando todas palavras que tem a primeira letra com uma das letras contida na variáveis da minha tecla.
exemplo no teclado do celular a tecla com o num 2 tem associados as letras A, B, C então quando eu clicar essa tecla vou buscar todas palavras na minha lista que comecem com A ou B ou C e criar uma nova lista de palavras com somente as palavras que iniciem com estas letras, para dar continuidade vou digitar outra tecla ou até a mesma porem agora vou pesquisar nesta lista que criei todas as palavras que tem a segunda letra com a letra associadas a tecla pressionada.

se alguém tem ideia de como eu possa fazer isso agradeço

Vamos dar um exemplo de estrutura de dados que você pode usar. Não pense pequeno (lista de 100 palavras), use uma lista completa e grande mesmo, para ver que algoritmos ingênuos não são bons.

Se você tiver um pouco mais de tempo, deve haver uma lista bem completa, incluindo as conjugações dos verbos (procure por “aspell”).

Vou dar um exemplo com 4 palavras, que tirei desta lista, que tem 29858 palavras e não é nem um pouco completa porque não tem as conjugações dos verbos.

http://alcor.concordia.ca/~vjorge/Palavras-Cruzadas/Lista-de-Palavras.txt

RENA, PAREO, PARVO, OVAL

Como você deve saber, os códigos numéricos correspondentes às palavras acima são:

7362, 72736, 72786, 6825

Você cria uma estrutura de dados que associa o código numérico à palavra (em vez de usar o método idiota de percorrer a lista completa e ficar procurando cada combinação. Esse método só funciona para listas muito pequenas - talvez uns 20 ou 30 elementos, depois você acaba vendo que ele é muito ineficiente).

Você precisa de uma estrutura de dados (como uma “trie”) que permita a você percorrer esses códigos aos poucos.
Se possível, veja se você consegue também uma lista das frequências relativas de cada palavra. Por exemplo, a palavra “a” é muito mais frequente que a palavra “antracito”, portanto você
Dê uma olhada no artigo da Wikipedia para mais detalhes:

Vou dar um exemplo para percorrer essa lista.

7 -> você não vai listar todas as palavras que começam por P, Q, R e S. Essa lista é muito grande. Se for mostrá-la, ordene as palavras pela sua frequência relativa, já que é impossível você mostrar uma lista de 1000 palavras e ela ser útil. Mostre um listbox que mostra as 10 palavras mais frequentes no começo, e o resto se você rolar o listbox.

72 -> você provavelmente vai ter as seguintes palavras que começam pelas seguintes letras:
PA…
RA…
SA…
Essa lista ainda é um pouco grande.

727 -> deve bater com as palavras que começam com as seguintes letras:
PAP…
PAQ…
PAR…
PAS…
RAP…
RAQ…
RAR…
RAS…
SAP…
SAR…
SAS…
Essa lista é menor,

e assim por diante.

Salve Galera

Acabei de ter uma lus com um Amigo meu,
se eu trabalhar com Banco de Dados e varer a tabela usando LIKE para varer todas palavras que contem os carecteres da minha variavel
alguem sabe usar LIKE no java, e conexão com MYSQL

se alguem conseguir me dar um exemplo que eu possa usar no meu teclado T9

Obrigado

EU nao usaria um banco de dados, mas se voce for usar um banco de dados, eh relativamente facil, porque voce pode criar uma tabela com tres colunas: uma das colunas eh a palavra em si, a segunda coluna seria o codigo numerico, e a terceira a frequencia relativa.
Voce pode fazer algo como select palavra from tabela where codigo like ‘653%’ order by frequencia descending - ou coisa parecida.

Bom Dia Pessoal
deem uma olhada no meu código até o momento e verifiquem se estou no caminho certo
se alguém puder me ajudar agradeço muito tenho que entregar isso até segunda feira :frowning:

Classe Dicionario

[code]
package model;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import data.service.DicionarioDAO;

public class Dicionario {

Dicionario () {}

private List<String> tecladas = new ArrayList<String>();
public List<String> retornadas = new ArrayList<String>();

public List<String> getRetornadas() {
	return retornadas;
}

public void setRetornadas(List<String> retornadas) {
	this.retornadas = retornadas;
}

public List<String> getTecladas() {
	return tecladas;
}

public void setTecladas(List<String> tecladas) {
	this.tecladas = tecladas;
}

public void busca(List<String> lista) throws SQLException{
	DicionarioDAO dao = new DicionarioDAO();
	setRetornadas(dao.recuperar(lista));
}

}[/code]

Classe DicionarioDao


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package data.service;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class DicionarioDAO {

    private Connection connection;
    private Conexao conexao;

    public DicionarioDAO() {
        conexao = Conexao.getInstance();
        connection = conexao.abrirConexao();
    }

    public List<String> recuperar(List<String> texto) throws SQLException {
        List<String> result = new ArrayList<String>();
        Statement sta = connection.createStatement();
        
        for (String s: texto){ //PARA CADA ITEM NA LISTA QUE RECEBI
	        ResultSet elements = sta.executeQuery("SELECT * "
	                + "FROM dicionario where palavra LIKE '" + s + "%'");
	        //BUSCA NA BANCO
	        while (elements.next()) {
	            result.add(elements.getString("palavra"));
	        }
        }
        conexao.fecharConexao();
        return result;
    }

}