GRAZIEEEE!
Tanto per precisione ti posto il codice completo:
codice:
/***
NOMEFiLE: SetCoordinate.java
AUTORE: Baglieri Salvatore & Fundarò Alessandro
VERSiONE: 1.0
OBiETTiVO: A partire dalle coordinate spaziali (x ed y)
visualizza il contenuto di 6 Remote Display
DATA: 28/09/2004
***/
package examples.CoordinateAgent;
/***
Importo librerie per l'interfaccia GUI
***/
import java.awt.*; // per i contenitori di componenti grafiche e il layout
import java.awt.event.*; // per l'interazione dell'utente con la GUI del programma
import javax.swing.*; // per le etichette, le caselle di testo e il bottone
/***
Dichiarazione della classe SetCoordinate che utilizza finestra GUI
***/
public class SetCoordinate extends JFrame {
private int x, y; // Coordinata X e Y
private int A=1, B=4, C=6, D=5,
E=9, F=18, G=7, H=18; // Punti critici del posizionamento
private JLabel xLabel, yLabel; // Etichette di testo
private JLabel unoLabel, dueLabel, treLabel,
quattroLabel, cinqueLabel, seiLabel; // Etichette per i display
private JTextField unoField, dueField, treField,
quattroField, cinqueField, seiField; // Caselle di testo per i display
public JTextField xField, yField, display; // Caselle di testo
private JButton button=new JButton("AGGiORNA DiSPLAY!"); // Pulsante
/***
Metodo principale SetCoordinate in cui vengono definite le componenti grafiche
***/
public SetCoordinate () {
// titolo della finestra
super("Sistema di posizionamento");
// definizione del contenitore c
Container c = getContentPane();
c.setLayout( new FlowLayout() );
// in risposta ad un'azione eseguita su un componente GUI
ActionEventi evento = new ActionEventi();
/***
Definizione delle etichette per le coordinate X ed Y
***/
xLabel = new JLabel( "Posizione X" );
xField = new JTextField( 10 );
xField.addActionListener(evento);
c.add( xLabel );
c.add( xField );
yLabel = new JLabel( "Posizione Y" );
yField = new JTextField( 10 );
yField.addActionListener(evento);
c.add( yLabel );
c.add( yField );
display = new JTextField( 40 );
display.setEditable( false );
c.add( display );
/***
Definizione delle etichette dei Remote Display in cui verranno visualizzati i messaggi
in base alle coordinate fornite dal sistema di posizionamento.
***/
unoLabel = new JLabel( "\nRemote Display 01" );
unoField = new JTextField( 40 );
unoField.setEditable( false );
c.add( unoLabel );
c.add( unoField );
dueLabel = new JLabel( "Remote Display 02" );
dueField = new JTextField( 40 );
dueField.setEditable( false );
c.add( dueLabel );
c.add( dueField );
treLabel = new JLabel( "Remote Display 03" );
treField = new JTextField( 40 );
treField.setEditable( false );
c.add( treLabel );
c.add( treField );
quattroLabel = new JLabel( "Remote Display 04" );
quattroField = new JTextField( 40 );
quattroField.setEditable( false );
c.add( quattroLabel );
c.add( quattroField );
cinqueLabel = new JLabel( "Remote Display 05" );
cinqueField = new JTextField( 40 );
cinqueField.setEditable( false );
c.add( cinqueLabel );
c.add( cinqueField );
seiLabel = new JLabel( "Remote Display 06" );
seiField = new JTextField( 40 );
seiField.setEditable( false );
c.add( seiLabel );
c.add( seiField );
// bottone aggiunto all'interfaccia grafica ed associato ad un evento
button.addActionListener(evento);
c.add(button);
/***
Caratteristiche finestra:
- setSize(Larghezza, Altezza)
- setLocation(PosizioneX,PosizioneY)
Posizioni iniziali rispetto al punto 0, 0
situato in alto a sinistra del monitor.
***/
setSize(500,420);
setLocation(100,100);
// Visualizza la finestra
show();
} // Fine metodo SetCoordinate
/***
Metodo principale in cui viene aperta la finestra
***/
public static void main (String args[]) {
SetCoordinate window = new SetCoordinate();
window.addWindowListener (
new WindowAdapter () {
public void windowClosing ( WindowEvent e )
{
System.exit(0);
}
}
);
} // Fine metodo Main
/***
Caricamento dell'ActionListener per la definizione
delle risposte del programma in seguito ad un'azione
dell'utente (in questo caso: click sul Button)
***/
private class ActionEventi implements ActionListener {
public void actionPerformed( ActionEvent e ) {
x=Integer.parseInt (xField.getText());
y=Integer.parseInt (yField.getText());
display.setText( "La coordinata X è: " + x +"; mentre la coordinata Y è: " + y );
/***
Nel caso di posizioni non monitorate o errate,
tutti i display sono spenti (OFF)!
***/
unoField.setText(" OFF ");
dueField.setText(" OFF ");
treField.setText(" OFF ");
quattroField.setText(" OFF ");
cinqueField.setText(" OFF ");
seiField.setText(" OFF ");
/***
-+ ZONA 1 +-
***/
if (x>0 && x<D) {
if (y>=B && y<=C) {
unoField.setText("DIPARTIMENTO DI INFORMATICA - Università di Palermo");
dueField.setText(" OFF ");
treField.setText(" OFF ");
quattroField.setText(" OFF ");
cinqueField.setText("Spazio non monitorato");
seiField.setText(" OFF ");
}
}
[...]
} // Fine ActionPerformed
} // Fine ActionEventi
public String[] getTextFieldValues(){ return new String[]{xField.getText(), yField.getText()}; }
} // Fine Classe
codice:
/***
NOMEFiLE: CoordinateAgent.java
OBiETTiVO: A partire dalle coordinate spaziali (x ed y)
visualizza il contenuto di 6 Remote Display
DATA: 12/10/2004
***/
package examples.CoordinateAgent;
import jade.core.*;
import jade.core.behaviours.*;
import jade.lang.acl.*;
/***
Dichiarazione della classe CoordinateAgent che utilizza le funzionalità degli agenti
***/
public class CoordinateAgent extends Agent {
protected void setup() {
addBehaviour(new SimpleBehaviour(this) { // Aggiunge un nuovo comportamento "semplice"
private boolean finished = false; // Variabile booleana
public void action() {
SetCoordinate s = new SetCoordinate();
String output = "";
System.out.println(getLocalName() +": ready!!"); // Stampa il messaggio
doWait(15000); // Aspetta 15 secondi prima di inviare il messaggio
output="Coordinate: " + s.getTextFieldValues()[0] + " " + s.getTextFieldValues()[1];
AID r = new AID(); // Crea un nuovo AID che corrisponderà a quella del Receiver
r.setLocalName("display1@messia:1099/JADE"); // Setta come, receiver, l'agente "display1"
ACLMessage msg = new ACLMessage(ACLMessage.QUERY_REF); // Dichiara un nuovo messaggio di tipo QUERY_REF
msg.setSender(getAID()); // Setta come sender se stesso
msg.addReceiver(r); // Aggiunge tra i receiver del messaggio "r"
msg.setContent(output); // Setta il contenuto del messaggio "msg"
send(msg); // Invia il messaggio
/***
1. Setta la variabile booleanda finished a TRUE
2. Aspetta 5 secondi
3. Cancella se stesso.
***/
finished = true;
doWait(5000);
myAgent.doDelete();
} // Fine action()
public boolean done() {
return finished;
} // Fine done()
}); // Fine Behaviour
} // Fine setup()
} // Fine CoordinateAgent
codice:
/***
NOMEFiLE: ReceiverAgent.java
OBiETTiVO: Riceve il messaggio da visualizzare
dal CoordinateAgent e lo visualizza
a schermo intero
***/
package examples.ReceiverAgent;
import javax.swing.JOptionPane;
import jade.core.*;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.DFService;
import jade.domain.FIPAException;
// Definizione della classe RecevierAgent
public class ReceiverAgent extends Agent {
// inizializzazione della stringa display a stringa vuota
String display="";
// crea la classe WaitRecevierAndReplyBehaviour che estende il comportamento della classe
// di jade che non fa altro che aspettare un messaggio per poi rispondere di conseguenza
class WaitRecevierAndReplyBehaviour extends SimpleBehaviour {
private boolean finished = false; // Dichiarazione di una variabile booleana settata a false
/***
Creazione del metodo WaitReceiverAndReplyBehaviour
al cui interno viene passato il parametro "a"
***/
public WaitReciverAndReplyBehaviour(Agent a) { super(a); } // Fine WaitReciverAndReplyBehaviour
public void action() { // Dichiarazione del metodo action
ACLMessage msg = blockingReceive(); // Istanza di un messaggio ACL denominato msg
if(msg != null) {
ACLMessage reply = msg.createReply();
if(msg.getPerformative()== ACLMessage.QUERY_REF){
String content = msg.getContent();
display = content;
JOptionPane.showMessageDialog(null, display, "Messaggio", JOptionPane.PLAIN_MESSAGE); // Stampa il messaggio
}
} else {
JOptionPane.showMessageDialog(null, "Messaggio non valido!!", "Messaggio", JOptionPane.WARNING_MESSAGE);
}
} // Fine action()
public boolean done() { return finished; }
} // Fine classe WaitReciverAndReplyBehaviour
// Dichiarazione del metodo protected setup()
protected void setup() {
/** Registrazione con il DF **/
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("AgentcitiesReciverAgent");
sd.setName(getName());
sd.setOwnership("Baglieri & Fundarò");
dfd.setName(getAID());
dfd.addServices(sd);
try { DFService.register(this,dfd); } catch (FIPAException e) {
System.err.println(getLocalName()+" registrazione con DF non effettuata. Ragione: "+e.getMessage());
doDelete();
}
WaitRicevierAndReplyBehaviour nostroBehaviour = new WaitRecevierAndReplyBehaviour(this);
addBehaviour(nostroBehaviour);
} // Fine setup()
} // Fine classe RecevierAgent
Ne approfitto per chiederti... al posto della classica:
codice:
JOptionPane.showMessageDialog(null, display, "Messaggio", JOptionPane.PLAIN_MESSAGE); // Stampa il messaggio
cosa potrei usare per stampare il messaggio su una finestra gigante con scritto, altrettanto gigante, il contenuto di display??
codice:
JOptionPane.showMessageDialog(null, display, "Messaggio", JOptionPane.GIGANT_MESSAGE ); // Stampa il messaggio
Non credo che esista