PDA

Visualizza la versione completa : [JAVA] Comando extends.. quando 1 non basta!


JavaDisperato
13-10-2004, 11:49
Ho creato un agente cosìfatto:



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() {

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


Questo non deve fare altro che ricevere due coordinate x ed y, decidere un messaggio da inviare ad un altro agente ed inviarlo. Tralasciando il fatto che "msg.addReceiver("RMA@miopc:1099/JADE");" viene riconosciuto come errore, xkè non è applicabile una stringa al metodo addReceiver. La mia domanda è un'altra, vorrei far aprire a tale programma un altro programma da me creato:



/***

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();

/***

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



In sintesi, il primo agente deve lanciare il SetCoordinate, prendere il messaggio del primo display e memorizzarlo nel messaggio ACL "msg". Come fare???? Visto che in JAVA non è possibile una cosa del tipo "extends Agent extends JFrame", come estendere le due cose?

Spero nel vostro aiuto....

Angelo1974
13-10-2004, 12:14
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 :) ):


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:

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

JavaDisperato
13-10-2004, 13:08
Ho aggiunto



public String[] getTextFieldValues() {

return new String[]{
xField.getText(),
yField.getText()
};
}


al SetCoordinate.java e...

F:\jade\examples\CoordinateAgent>javac SetCoordinate.java
SetCoordinate.java:91: illegal start of expression
public String[] getTextFieldValues() {
^
1 error

JavaDisperato
13-10-2004, 14:57
effettivamente non capisco cosa non vada nel SetCoordinate modificato... è possibile che debba dichiarare diversamente o in posizione diversa il metodo??

Angelo1974
13-10-2004, 15:59
Ciao; ti chiedo scusa.... ho mnesso il metodo nel costruttore della classe :zizi: ; la fretta.... prova così:

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

***/
/*
Suppongo cge tu voglia avere i valori dai textfield x e y
*/
public String[] getTextFieldValues(){

return new String[]{
xFiled.getText(),
yField.getText()
}
}
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 ");
}
}

/***

-+ 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

}

JavaDisperato
13-10-2004, 16:43
GRAZIEEEE!

Tanto per precisione ti posto il codice completo:




/***

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





/***

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





/***

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:


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??


JOptionPane.showMessageDialog(null, display, "Messaggio", JOptionPane.GIGANT_MESSAGE ); // Stampa il messaggio
Non credo che esista :)

Angelo1974
13-10-2004, 17:03
Ciao; mi fa piacere che funzioni; per la seconda domanda... in verità mi trovi un po' spiazzato perchè non utilizzo Swing da anni e non mi ricordo gran che.... cmq mi informerò e se ne avrai ancora bisogno ti dirò. Ciao

Loading