Ciao; secondo me potresti crearti un metodo publico nel SetCoordinate che si occupa di restituire il messaggio; questo metodo può essere richiamato dal primo agente che poi va a valorizzare il messaggio ACL "msg". Una cosa, per intenderci, di questo tipo (a patto che abbia capito bene il tuo problema
):
codice:
NOMEFiLE: SetCoordinate.java
AUTORE: Baglieri Salvatore & Fundarò Alessandro
VERSiONE: 1.0 BETA
OBiETTiVO: A partire dalle coordinate spaziali (x ed y)
visualizza il contenuto di 6 Remote Display
DATA: 28/09/2004
***/
/***
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
private 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();
/*
Suppongo cge tu voglia avere i valori dai textfield x e y
*/
public String[] getTextFieldValues(){
return new String[]{
xFiled.getText(),
yField.getText()
}
}
/***
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 ");
}
}
/***
-+ ZONA 2 +-
***/
if (x>D && x<F) {
if (y>=B && y<=C) {
unoField.setText(" OFF ");
dueField.setText("Laboratorio di ricerca: Ufficio dell'Ing. Sorce - Laureandi - Dott. di Ricerca");
treField.setText("Aule professori - Servizi Igienici (in fondo a sinistra)");
quattroField.setText(" OFF ");
cinqueField.setText(" OFF ");
seiField.setText(" OFF");
}
}
/***
-+ ZONA 3 +-
***/
if (x>=G && x<=E) {
if (y>=C && y<H) {
unoField.setText(" OFF ");
dueField.setText(" OFF ");
treField.setText(" OFF ");
quattroField.setText(" OFF ");
cinqueField.setText(" OFF ");
seiField.setText("Servizi Igienici");
}
}
/***
-+ ZONA 4 +-
***/
if (x>=D && x<=E) {
if (y>=A && y<=B) {
unoField.setText(" OFF ");
dueField.setText(" OFF ");
treField.setText(" OFF ");
quattroField.setText(" Ufficio dell'Ing. Salvatore Sorce ");
cinqueField.setText(" OFF ");
seiField.setText(" OFF ");
}
}
} // Fine ActionPerformed
} // Fine ActionEventi
} // Fine Classe
Poi:
codice:
package examples.CoordinateAgentAgent;
import jade.core.Agent;
import jade.core.AID;
import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.*;
public class CoordinateAgent extends Agent {
protected void setup() {
addBehaviour(new CyclicBehaviour(this) {
public void action() {
//Quì invento perchè non conosco queste classi
SetCoordinate s = new Set Coordinate();
ACLMEssage msg = s.getTextFieldValues()[0];
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);;
ACLMessage reply = msg.createReply();
msg.setSender(getAID()); //Per inserire il nome proprio dell'agente mittente
msg.addReceiver("RMA@miopc:1099/JADE");
msg.setContent("Ciao");
send(msg); //Per spedire il messaggio
}//Fine action()
});//Fine CyclicBehaviour
}//Fine setup()
}//Fine ExampleAgent
Penso che così dovrebbe andare. Fammi sapere ciao