Olá à todos.
Preciso fazer um jogo simples, tipo do stop em rede. Como sou novato em Socket, preciso de umas ajudas…
Acho que consegui conectar o cliente ao servidor (testei só no meu pc). Porém, não to conseguindo fazer com que tudo que o servidor faça, apareça para o cliente.
Tipo, eu tenho um botão de gerar letra que só aparece para quem criou a sala. E eu to querendo que, quando o botão for apertado, apareça para o outro jogador a letra gerada.
Meu professor falou pra usar o readUTF… só que não estou conseguindo usar no evento do botão… se poderem me ajudar, eu agradeço.
Aí vão os códigos:
public class Login extends javax.swing.JFrame {
public Login() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
buttonGroup1 = new javax.swing.ButtonGroup();
criarSala = new javax.swing.JRadioButton();
entrarSala = new javax.swing.JRadioButton();
apelido = new javax.swing.JLabel();
apelido1 = new javax.swing.JTextField();
apelido2 = new javax.swing.JLabel();
txtApelido2 = new javax.swing.JTextField();
ipSala = new javax.swing.JLabel();
txtIpSala = new javax.swing.JTextField();
portaSala = new javax.swing.JLabel();
txtPortaSala = new javax.swing.JTextField();
entrar = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
buttonGroup1.add(criarSala);
criarSala.setSelected(true);
criarSala.setText("Criar sala");
criarSala.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
criarSalaActionPerformed(evt);
}
});
buttonGroup1.add(entrarSala);
entrarSala.setText("Entrar em uma sala");
entrarSala.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
entrarSalaActionPerformed(evt);
}
});
apelido.setText("Apelido: ");
apelido2.setText("Apelido: ");
ipSala.setText("IP da sala:");
portaSala.setText("Porta:");
txtPortaSala.setText("12345");
entrar.setText("Entrar");
entrar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
entrarActionPerformed(evt);
}
});
jLabel5.setFont(new java.awt.Font("Lucida Sans Unicode", 1, 14));
jLabel5.setText("BEM-VINDO AO iSTOP !");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(criarSala)
.addGroup(layout.createSequentialGroup()
.addComponent(apelido)
.addGap(10, 10, 10)
.addComponent(apelido1, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 4, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(ipSala)
.addComponent(portaSala)
.addComponent(apelido2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(txtApelido2, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)
.addComponent(txtPortaSala, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)
.addComponent(txtIpSala, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)
.addComponent(entrar, javax.swing.GroupLayout.Alignment.TRAILING)))
.addComponent(entrarSala))
.addGap(30, 30, 30))
.addGroup(layout.createSequentialGroup()
.addGap(74, 74, 74)
.addComponent(jLabel5)
.addContainerGap(77, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel5)
.addGap(12, 12, 12)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(criarSala)
.addComponent(entrarSala))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(apelido1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(apelido))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 8, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtApelido2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(apelido2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtIpSala, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(ipSala))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(portaSala)
.addComponent(txtPortaSala, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(entrar)
.addContainerGap())
);
pack();
}// </editor-fold>
private void formWindowOpened(java.awt.event.WindowEvent evt) {
apelido2.setVisible(false);
ipSala.setVisible(false);
portaSala.setVisible(false);
txtApelido2.setVisible(false);
txtIpSala.setVisible(false);
txtPortaSala.setVisible(false);
}
private void entrarSalaActionPerformed(java.awt.event.ActionEvent evt) {
if (entrarSala.isSelected()) {
apelido.setVisible(false);
apelido1.setVisible(false);
apelido2.setVisible(true);
ipSala.setVisible(true);
portaSala.setVisible(true);
txtApelido2.setVisible(true);
txtIpSala.setVisible(true);
txtPortaSala.setVisible(true);
}
}
private void criarSalaActionPerformed(java.awt.event.ActionEvent evt) {
if (criarSala.isSelected()) {
apelido2.setVisible(false);
ipSala.setVisible(false);
portaSala.setVisible(false);
txtApelido2.setVisible(false);
txtIpSala.setVisible(false);
txtPortaSala.setVisible(false);
apelido.setVisible(true);
apelido1.setVisible(true);
}
}
private void entrarActionPerformed(java.awt.event.ActionEvent evt) {
Jogo jogo = new Jogo();
final ServidorTCP servidor = new ServidorTCP();
final ClienteTCP cliente = new ClienteTCP();
if (criarSala.isSelected()) {
new Thread(new Runnable() {
public void run() {
// try {
servidor.runServer();
// } catch (Exception ex) {
// Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
//}
}
}).start();
}
if (entrarSala.isSelected()) {
/* if (!txtPortaSala.getText().equals("54321")) {
JOptionPane.showMessageDialog(null, "Não");
} */
new Thread(new Runnable() {
public void run() {
cliente.executa();
}
}).start();
}
dispose();
jogo.setVisible(true);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Login().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel apelido;
private javax.swing.JTextField apelido1;
private javax.swing.JLabel apelido2;
private javax.swing.ButtonGroup buttonGroup1;
protected static javax.swing.JRadioButton criarSala;
private javax.swing.JButton entrar;
protected static javax.swing.JRadioButton entrarSala;
private javax.swing.JLabel ipSala;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel portaSala;
private javax.swing.JTextField txtApelido2;
private javax.swing.JTextField txtIpSala;
private javax.swing.JTextField txtPortaSala;
// End of variables declaration
}
public class Jogo extends javax.swing.JFrame {
char v[]={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'};
public Jogo() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
comecar = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
letra = new javax.swing.JLabel();
letra1 = new javax.swing.JTextField();
nome = new javax.swing.JTextField();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
cor = new javax.swing.JTextField();
gerarLetra = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
comecar.setText("Começar");
comecar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
comecarActionPerformed(evt);
}
});
jLabel1.setText("Letra da Rodada: ");
letra1.setBackground(new java.awt.Color(247, 246, 246));
letra1.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
jLabel2.setText("Nome");
jLabel3.setText("Cor");
gerarLetra.setText("Gerar Letra");
gerarLetra.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
gerarLetraActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(169, 169, 169)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(40, 40, 40)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(cor, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE)
.addComponent(jLabel3)))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(letra1, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
.addGap(112, 112, 112)
.addComponent(letra)))
.addGap(40, 40, 40)
.addComponent(gerarLetra)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(comecar)))
.addGap(345, 345, 345))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(24, 24, 24)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(comecar)
.addComponent(jLabel1)
.addComponent(letra, javax.swing.GroupLayout.PREFERRED_SIZE, 0, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(gerarLetra)
.addComponent(letra1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(39, 39, 39)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jLabel3))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(nome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(243, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void formWindowOpened(java.awt.event.WindowEvent evt) {
letra1.setVisible(false);
nome.setEditable(false);
cor.setEditable(false);
if(Login.criarSala.isSelected()){
comecar.setVisible(true);
gerarLetra.setVisible(true);
} else {
comecar.setVisible(false);
gerarLetra.setVisible(false);
}
}
private void comecarActionPerformed(java.awt.event.ActionEvent evt) {
nome.setEditable(true);
cor.setEditable(true);
gerarLetra.setEnabled(false);
}
private void gerarLetraActionPerformed(java.awt.event.ActionEvent evt) {
letra1.setVisible(true);
letra1.setEditable(false);
int indice = (int) ((Math.random()*v.length));
String temp= String.valueOf(v[indice]);
letra1.setText(temp);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Jogo().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton comecar;
private javax.swing.JTextField cor;
private javax.swing.JButton gerarLetra;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel letra;
protected static javax.swing.JTextField letra1;
private javax.swing.JTextField nome;
// End of variables declaration
}