Bom dia pessoal!
Primeiro vou apresentar o que estou desenvolvendo, e depois o erro:
Estou fazendo tipo um jogo de bingos, só q com palavras, onde o usuário as cadastra, e o jogo sorteia uma, através da ação d um botão. Todo esse código de sorteio e exibição das palavras sorteadas ja esta feito. Porém, ele esta feito d forma diferente: ao invés de ser utilizado um array e o math.random para realizar o sorteio e a exibição das palavras, criei uma coluna no meu banco chamada “marca”, do tipo int, em que ela só possui em seu campo, ou 0 ou 1, sendo através dessa coluna q eu faço o sorteio e a exibição das palavras no jogo.
Porém o erro é o seguinte: qndo o programa roda pela primeira vez, ele sorteia todas as palavras, certinho, adicionando-as a um jList. Mas, se eu clico num botão de “zera td” e q funciona como função de “novo jogo”, ele deixa de sortear e mostra a ultima palavra do banco.
Ex: tenho 6 palavras, 6 registros no meu BD. Qndo abro a tela do jogo, ele sorteia todos, cada vez q clico no botão “Sorteio”, mostrando ao final, a mensagem de q deve-se iniciar d novo o jogo. Só q depois q clico em “novo jogo” e clico em “sorteio” novamente, ele sorteia até a 5ª palavra, e qndo clico pela 6ª vez, ñ ocorre nada, ele só altera no banco o campo marca dakeel registro, mas no modo visual do jogo, ñ muda nada. ai, qndo clico pela 7ª vez nesse botão, ele apenas mostra novamente a mensagem de q o jogo acabou. Ou seja, qndo o jogo é recomessado, ele deixa de exibir a ultima palavra sorteada.
Sendo assim, segue abaixo toda a codificação desta tela, q tem relação com este problema:
Obs: está abaixo apenas os códigos principais…
package bingoteacher2ªversao;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.ResultSet;
import java.sql.SQLException;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JOptionPane;
public class Sorteio extends javax.swing.JFrame {
public static String teste="", palavraBanco="";
public static int cont=0, marca=0, c=0, id=0, testeInt=0;
DefaultListModel modelo = new DefaultListModel();
JList listPalavras = new JList(modelo);
/* metodo usado em janelas e no botão Novo Jogo*/
public void atualizaBD()
{
if(BD.getConnection())
{
try
{
id=0;
modelo.clear();
if(BD.getConnection())
{
String query = "SELECT * from palavra";
BD.setResultSet(query);
String sql = "UPDATE palavra SET marca = 0 where marca =1";
BD.runSQL(sql);
}
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}
/* O método abaixo atualiza os componentes que recebem dados do banco,
* sendo eles os campos de palavra e id.
*
*/
public void atualizaCampo()
{
if(BD.getConnection())
{
try
{
String query = "SELECT * FROM palavra ORDER BY RAND()";
BD.setResultSet(query);
while(BD.resultSet.next())
{
marca = (BD.resultSet.getInt("marca"));
if(marca<1)
{
palavraBanco = (BD.resultSet.getString("pal"));
cont = (BD.resultSet.getInt("id"));
}
}
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}
private void formWindowOpened(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
listPalavras.setVisibleRowCount(100);
if(BD.getConnection())
{
try
{
teste = "SELECT COUNT(id) AS C from palavra";
BD.setResultSet(teste);
BD.resultSet.next();
c = BD.resultSet.getInt("C");
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}
private void SortearActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if(BD.getConnection())
{
try
{
String sql = "UPDATE palavra SET " + //coloca 1 na coluna marca, onde
"marca = '"+ 1 +"'" + //o id for igual a variavel cont
"WHERE id = '"+ cont +"'";
int r = BD.runSQL(sql);
id++;
atualizaCampo();
MostraSorteada.setText(palavraBanco);
if(!modelo.contains(palavraBanco))// Testa se o item existe na lista
{
modelo.addElement(palavraBanco);
}
if (id>c) //variavel c representa o tamanho do banco de dados
{
JOptionPane.showMessageDialog(null, "Todas as palavras ja foram sorteadas! Clique em 'Novo Jogo' para iniciar uma nova partida.", "Sorteio das palavras:", JOptionPane.ERROR_MESSAGE);
MostraSorteada.setText("");
}
}
catch(java.lang.Exception ex)
{
ex.printStackTrace();
}
}
}
private void SairActionPerformed(java.awt.event.ActionEvent evt) {
atualizaBD();
this.dispose();
}
private void formWindowClosing(java.awt.event.WindowEvent evt) {
// TODO add your handling code here:
atualizaBD();
}
private void NJActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
atualizaBD();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Sorteio().setVisible(true);
}
});
}
Desde já, obrigada pela ajuda!!! ;D