interfaz grafica, eventos, hilos y stocks

Iniciado por m@o_614, 7 Marzo 2015, 01:52 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

Saludos

he estado estudiando sobre hilos, interfaces graficas y eventos de boton, en practicas anteriores los habia programado por separado, pero en esta práctica tengo que usar tanto hilos, como interfaces, eventos, etc... Los requerimientos de la practica son:

1. Mostrar un área de texto
2. Mostrar una etiqueta "IP" seguida de un campo de texto a la derecha
3. Mostrar una etiqueta "mensaje" seguida de un campo de texto a la derecha
4. Mostrar un botón con la etiqueta "enviar"
5. Programar un Thread(como clase interna o externa a la clase Chat)
6. El hilo anterior se quede bloqueado a la espera de mensajes(como en Receptor.java)
7. El hilo imprima en el área de texto la IP de donde provenga el mensaje
8. Para la IP, se imprima sin la "/" usando el método getHostAdress() en lugar de toString()
9. El hilo imprima en el área de texto el contenido del mensaje que llegue
10. Realizar los puntos 7 al 10 para todo mensaje que llegue
11. Se puede probar la parte receptora de su chat si escucha al mismo puerto que el ejemplo
Receptor.java y se usa al Emisor.java para enviarle mensaje a su máquina.
12. Tras presionar el botón se obtenga el contenido del "campo IP" y del "campoMensaje"
13. Despues del paso anterior se inicien las instrucciones para emisión de mensaje por la red
(como en Emisor.java) usando los datos obtenidos del punto anterior.

ya tengo hecha la interfaz, y la clase Emisor y Receptor (que son las que envian los mensajes), el problema es que no se como manejar el hilo y las clases Emisor y Receptor en el codigo

Código (java) [Seleccionar]
import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Hilo extends Thread{
private boolean puedeImprimir = true;
private JTextArea areaTexto;
private JTextField campoMensaje;

Hilo(JTextArea cuadroTexto,JTextField campoTexto1){
areaTexto = cuadroTexto;
campoMensaje = campoTexto1;
}

public void ocurrioBotonazo()
{
if(puedeImprimir)
   this.puedeImprimir = false;
else
   this.puedeImprimir = true;
}

public void run()
{
//?????
}
}

class Interfaz extends JFrame implements ActionListener{
private Hilo hilo;
private GroupLayout marco;
private JButton boton;
private JLabel IP,mensaje;
private JTextArea areaTexto;
private JTextField campoIP,campoMensaje;

Interfaz(){
marco = new GroupLayout(getContentPane());
getContentPane().setLayout(marco);

boton = new JButton("enviar");
IP = new JLabel("IP");
mensaje = new JLabel("mensaje");
areaTexto = new JTextArea();
campoIP = new JTextField();
campoMensaje = new JTextField();
hilo = new Hilo(areaTexto,campoMensaje);

boton.addActionListener(this);

marco.setHorizontalGroup(
marco.createParallelGroup(Alignment.LEADING)
.addGroup(marco.createSequentialGroup()
.addContainerGap()
.addGroup(marco.createParallelGroup(Alignment.TRAILING)
.addGroup(marco.createSequentialGroup()
.addComponent(areaTexto, GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE)
.addContainerGap())
.addGroup(marco.createSequentialGroup()
.addGroup(marco.createParallelGroup(Alignment.TRAILING)
.addComponent(mensaje)
.addComponent(IP))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(marco.createParallelGroup(Alignment.LEADING, false)
.addComponent(campoIP)
.addComponent(campoMensaje, GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE))
.addGap(43))))
.addGroup(marco.createSequentialGroup()
.addGap(185)
.addComponent(boton)
.addContainerGap(186, Short.MAX_VALUE))
);

marco.setVerticalGroup(
marco.createParallelGroup(Alignment.LEADING)
.addGroup(marco.createSequentialGroup()
.addContainerGap()
.addComponent(areaTexto, GroupLayout.PREFERRED_SIZE, 85, GroupLayout.PREFERRED_SIZE)
.addGap(18)
.addGroup(marco.createParallelGroup(Alignment.BASELINE)
.addComponent(campoIP, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(IP))
.addPreferredGap(ComponentPlacement.UNRELATED)
.addGroup(marco.createParallelGroup(Alignment.BASELINE)
.addComponent(mensaje)
.addComponent(campoMensaje, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(30)
.addComponent(boton)
.addContainerGap(43, Short.MAX_VALUE))
);
}

public void actionPerformed(ActionEvent e) {
hilo.ocurrioBotonazo();

}
}

public class ChatUDP {

public static void main(String[] args) {
Interfaz interfaz = new Interfaz();
interfaz.setBounds(100, 100, 450, 300);
interfaz.setTitle("ChatUDP");
interfaz.setVisible(true);
}
}


Código (java) [Seleccionar]
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;
import javax.swing.*;

public class Emisor {
DatagramSocket emisionSocket;
DatagramPacket paquete;
String IP;
byte[] mensaje;

Emisor(JTextField campoMensaje,JTextField campoIP){
mensaje = campoMensaje.getText().getBytes();
IP = campoIP.getText();
}

public void main(JTextField campoMensaje,JTextField campoIP) {
try
{
emisionSocket = new DatagramSocket();
paquete = new DatagramPacket(mensaje,mensaje.length,InetAddress.getByName(IP),2001);
emisionSocket.send(paquete);
emisionSocket.close();
}
catch(SocketException e){
e.getMessage();
}
catch(UnknownHostException e){
e.getMessage();
}
catch(IOException e){
e.getMessage();
}
}

}


Código (java) [Seleccionar]
import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.SocketException;
import java.io.IOException;
import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;

public class Receptor {
DatagramSocket recepcionSocket;
DatagramPacket paquete;
int puerto = 2001;
byte[] buffer = new byte[1024];

Receptor(JTextArea areaTexto)
{

}

public void main() {
try
{
recepcionSocket = new DatagramSocket(puerto);
paquete = new DatagramPacket(buffer,buffer.length);
recepcionSocket.receive(paquete);
}
catch(SocketException e)
{
e.getMessage();
}
catch(IOException e)
{
e.getMessage();
}
}

}


de antemano gracias