|
|
|
Exercici 1: Boles amb preferència. |
|
|
|
Reviseu el codi del programa
amb multifils, BolaFils.java, de la pràctica
1. Anomeneu-lo M7ex01.java i afegiu-li un
nou botó amb l'etiqueta "Alta
Prioritat" que ens generi una bola igual que la del programa,
però en un fil de prioritat màxima.
Mireu si sou capaços d'aconseguir que pinti la bola d'un color diferent
de la de prioritat normal. |
|
|
|
Exercici 2: Saber l'hora amb Java |
|
|
|
Repasseu la pràctica de connexió
via telnet al servidor d'hora del
NIST (pràctica
3). Feu un petit programa escrit en Java
que faci la mateixa feina que la comanda Telnet.
Poseu-li el nom M7ex02.java. |
|
|
|
Exercici 3: Un xat (sockets) |
|
|
|
Es tracta de vestir el xat
del projecte Xat
(pràctica 3 d'aquest mòdul) amb
una GUI per tal que tingui aquest aspecte: |
|
|
|
|
|
|
El codi font per a la GUI
és aquest: ara falta completar-lo per tal que actui com a programa
de xat entre dues màquines: |
|
|
|
/*
* @(#)M6ex03.java 1.0 02/11/09
*
* You can modify the template of this file in the
* directory ..\JCreator\Templates\Template_1\Project_Name.java
*
* You can also create your own project template by making a new
* folder in the directory ..\JCreator\Template\. Use the other
* templates as examples.
*
*/
//package myprojects.m6ex03;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*; |
class M6ex03 extends Frame {
|
int numPortLocal,numPortRemot;
String adrRemota;
TextArea textosXat;
boolean connectat;
ServerSocket serverSocket;
Socket clientSocket;
PanelConnexions panelConnexions;
PanelEnviar panelEnviar;
RebreThread rebreThread;
|
public
M6ex03() { |
panelConnexions=new
PanelConnexions(this);
add(panelConnexions,BorderLayout.NORTH);
panelEnviar=new PanelEnviar(this);
add(panelEnviar,BorderLayout.SOUTH);
textosXat=new TextArea(30,60);
textosXat.setFont(new
Font("Monospaced",Font.PLAIN,18));
textosXat.setEditable(false);
textosXat.setEnabled(false);
add(textosXat,BorderLayout.CENTER);
rebreThread=new RebreThread(this); |
addWindowListener(new
WindowAdapter() {
public
void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public static void main(String args[]) {
System.out.println("Starting
M6ex03...");
M6ex03 mainFrame =
new M6ex03(); |
mainFrame.setSize(620,
500); |
mainFrame.setTitle("Xat");
mainFrame.setVisible(true);
}
|
public
void escolta () {
if
(serverSocket!=null) {
try
{
serverSocket.close();
serverSocket=null;
}
catch (IOException e) {
}
}
try
{
serverSocket=new
ServerSocket(numPortLocal);
System.out.println("Escoltant
al port: "+
numPortLocal);
panelConnexions.adrRemot.setEnabled(true);
panelConnexions.portRemot.setEnabled(true);
panelConnexions.connecta.setLabel("Connecta");
panelConnexions.connecta.setEnabled(true);
}
catch (IOException e) {
System.out.println("No
puc escoltar al port: "+
numPortLocal);
System.exit(0);
}
}
public void connecta () {
rebreThread=new
RebreThread(this);
rebreThread.start();
textosXat.setEnabled(true);
panelEnviar.missatge.setEnabled(true);
panelEnviar.envia.setEnabled(true);
panelEnviar.missatge.requestFocus();
}
public void desconnecta () {
rebreThread=null;
textosXat.setEnabled(false);
panelEnviar.missatge.setEnabled(false);
panelEnviar.envia.setEnabled(false);
}
public void enviaMissatge () {
Socket outSocket=null;
String text=panelEnviar.missatge.getText();
if
(text.length()==0) {
return;
}
try
{
//
Posar el codi que calgui...
}
catch (IOException e) {
System.out.println("No
puc conectar amb "+
adrRemota+
"
al port "+
numPortRemot);
return;
}
}
public void afegeixMissatge (String text)
{
text=tallaEnLinies(text);
textosXat.append(text);
}
public String tallaEnLinies (String text)
{
String ambCR="";
String paraula="";
text=text+"
";
int longitud=text.length();
int limit=textosXat.getColumns();
int chars=0;
for
(int i=0;i<longitud;i++) {
String
aquestCaracter=text.substring(i,i+1);
paraula=paraula+aquestCaracter;
chars++;
if
(aquestCaracter.equals(" ")) {
if
(chars>limit) {
ambCR=ambCR+"\n";
chars=paraula.length()+1;
}
ambCR=ambCR+paraula;
paraula="";
}
}
return ambCR+"\n";
}
|
}
|
class PanelConnexions
extends Panel implements ActionListener {
M6ex03 mainAp;
Button obre,connecta;
TextField portLocal,adrRemot,portRemot;
public PanelConnexions (M6ex03 xt) { //constructor
super();
mainAp=xt;
setLayout(new BorderLayout());
Panel panelDadesConnexio=new
Panel();
panelDadesConnexio.setLayout(new
GridLayout(2,1));
Panel panelLocal=new
Panel();
panelLocal.setLayout(new
FlowLayout(FlowLayout.RIGHT));
panelLocal.add(new
Label("Port local: ",Label.RIGHT));
portLocal=new TextField("8086");
portLocal.setEnabled(true);
panelLocal.add(portLocal);
panelDadesConnexio.add(panelLocal);
Panel panelRemot=new
Panel();
panelRemot.setLayout(new
FlowLayout(FlowLayout.RIGHT));
panelRemot.add(new
Label("Adreça remota: ",Label.RIGHT));
adrRemot=new TextField("192.168.0.151");
adrRemot.setEnabled(false);
panelRemot.add(adrRemot);
panelRemot.add(new
Label("Port remot: ",Label.RIGHT));
portRemot=new TextField("8086");
portRemot.setEnabled(false);
panelRemot.add(portRemot);
panelDadesConnexio.add(panelRemot);
add(panelDadesConnexio,BorderLayout.CENTER);
Panel panelBotonsConnexio=new
Panel();
panelBotonsConnexio.setLayout(new
GridLayout(2,1));
obre=new Button("Obre
la connexió");
obre.addActionListener(this);
obre.setEnabled(true);
panelBotonsConnexio.add(obre);
connecta=new Button("Connecta");
connecta.addActionListener(this);
connecta.setEnabled(false);
panelBotonsConnexio.add(connecta);
add(panelBotonsConnexio,BorderLayout.EAST);
mainAp.connectat=false;
}
public void actionPerformed(ActionEvent
e) {
Object obj=e.getSource();
if
(obj instanceof Button) {
Button
bot=(Button)obj;
if
(bot==obre) {
mainAp.numPortLocal=Integer.parseInt(
portLocal.getText()
);
mainAp.escolta();
}
else if (bot==connecta) {
if
(mainAp.connectat) {
portLocal.setEnabled(true);
obre.setEnabled(true);
adrRemot.setEnabled(false);
portRemot.setEnabled(false);
connecta.setLabel("Connecta");
connecta.setEnabled(false);
mainAp.desconnecta();
mainAp.connectat=false;
}
else {
mainAp.adrRemota=adrRemot.getText();
mainAp.numPortRemot=Integer.parseInt(
portRemot.getText()
);
portLocal.setEnabled(false);
obre.setEnabled(false);
adrRemot.setEnabled(false);
portRemot.setEnabled(false);
connecta.setLabel("Desconnecta");
mainAp.connecta();
mainAp.connectat=true;
}
}
}
}
}
class PanelEnviar extends Panel implements ActionListener {
M6ex03 mainAp;
Button envia;
TextField missatge;
public PanelEnviar (M6ex03 xt) {
super();
mainAp=xt;
setLayout(new BorderLayout());
missatge=new TextField();
missatge.setEnabled(false);
add(missatge,BorderLayout.CENTER);
envia=new Button("Envia...");
envia.addActionListener(this);
envia.setEnabled(false);
add(envia,BorderLayout.EAST);
}
public void actionPerformed(ActionEvent
e) {
Object obj=e.getSource();
if
(obj instanceof Button) {
Button
bot=(Button)obj;
if
(bot==envia) {
mainAp.enviaMissatge();
missatge.requestFocus();
}
}
}
}
class RebreThread extends Thread {
// Posar el
codi que calgui...
}
|
|
|
|
|
La vostra feina és, doncs, posar el codi
que falta. A l'acabar, comprimiu
l'aplicació en un fitxer M7ex03.jar
autoexecutable. |
|
|
|
Exercici 4: |
|
|
|
Modifiqueu el programa GestioUsuaris.java de
la pràctica 5 afegint-hi aquesta cinquena
opció:
5
- Llistar els usuaris el primer cognom dels quals sigui igual a ? |
Anomeneu-lo M7ex04.java.
|
|
|
|
Tramesa al vostre tutor: |
|
|
|
Comprimiu les quatre carpetes
M7ex01, M7ex02,
M7ex03 i M7ex04 en un
fitxer ZIP, que es dirà <nom_usuari>_m7.zip
i trameteu-lo al vostre tutor. |
|
|
 |
|
|
|
|