PDA

View Full Version : [Java] sono ignorante


yashi79
04-12-2007, 11:22
allora ragazzi...

ho un agente software
ho un'interfaccia grafica costruita a parte

questo agente deve fare delle azioni, tipo aggiornare un catalogo, da interfaccia grafica.

Ma come glielo dico che col pulsante, i dati immessi nei textField sono da memorizzare nel catalogo?

allora, nel mio agente ho la funzione:

// aggiorna il catalogo:
public void updateCatalogue(final String nomeProdotto, ProdottoC p) {
addBehaviour(new OneShotBehaviour() {

public void action() {
ProdottoC p = new ProdottoC();
MieiProdotti.put(nomeProdotto, p);
System.out.println(nomeProdotto + " inserito nel catalogo.");
}
});
}

inoltre vorrei visualizzare questo catalogo...

private Hashtable<String, ProdottoC> MieiProdotti;

come fo?
finora ho stressato tigershark....
ma siccome poerello mi sa che l'ho collassato...
bè vi sarei grata di cuore se mi spiegaste, come si fa ai bimbi piccoli, come devo fare....

p.s.: l'esame è domani....hi h ih i

yashi79
04-12-2007, 17:13
ragazzi ci riprovo....
allora andiamo per passi:
ho due classi
una delle due è una gui, fatta a parte con netbeans...
come le faccio comunicare?
cioè, come dico alla gui che deve far parte dell'altra classe? mi sa che nn mi ritrovo nel costruttore....
nella GUI:
public class GUICliente extends javax.swing.JFrame {

/** Creates new form GUICliente */
public GUICliente() {

initComponents();
}
mentre nell'altra classe ho:
....
private GUICliente myGui;
...

protected void setup() {
myGui = new GUICliente();
myGui.show();


AIUTO...

yorkeiser
04-12-2007, 18:22
E qual'è il problema? myGUI.setup() chiama il costruttore della GUI, che a sua volta esegue l'initComponents() per inizializzare (suppongo, non c'è il codice) i componenti ed il layout della GUI. Quindi con myGUI.show() la dovresti vedere a schermo. La GUI NON fa parte dell'altra classe, ma viene semplicemente richiamata da essa.

^TiGeRShArK^
04-12-2007, 18:24
ragazzi ci riprovo....
allora andiamo per passi:
ho due classi
una delle due è una gui, fatta a parte con netbeans...
come le faccio comunicare?
cioè, come dico alla gui che deve far parte dell'altra classe? mi sa che nn mi ritrovo nel costruttore....
nella GUI:
public class GUICliente extends javax.swing.JFrame {

/** Creates new form GUICliente */
public GUICliente() {

initComponents();
}
mentre nell'altra classe ho:
....
private GUICliente myGui;
...

protected void setup() {
myGui = new GUICliente();
myGui.show();


AIUTO...
dovrebbe essere così ad occhio se non ricordo male...

private GUICliente myGui;
...

protected void setup() {
myGui = new GUICliente();
myGui.pack();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
myGui.setVisible(true);
}
});

..ma per le GUI è PGI-BIS che si ricorda tutto a memoria..:stordita:
e io qua non ho eclipse :fagiano:

yashi79
04-12-2007, 18:26
si ok...
ma io dalla gui devo richiamare dei metodi facenti parte dell'altra classe...
in pratica nn ho la più pallida idea di come richiamare tali metodi coi listener! perdona il gergo da principiante :muro:

lovaz
04-12-2007, 18:29
passi "this" al costruttore di GUICliente

^TiGeRShArK^
04-12-2007, 18:32
si ok...
ma io dalla gui devo richiamare dei metodi facenti parte dell'altra classe...
in pratica nn ho la più pallida idea di come richiamare tali metodi coi listener! perdona il gergo da principiante :muro:

basta che nella tua classe ti memorizzi in un field privato l'agente... + o - così:

public class GUICliente extends javax.swing.JFrame {

private MyAgent agent;
/** Creates new form GUICliente */
public GUICliente(MyAgent agent) {
this.agent = agent;
initComponents();
}

e

private GUICliente myGui;
...

protected void setup() {
myGui = new GUICliente(this);
myGui.pack();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
myGui.setVisible(true);
}
});

yorkeiser
04-12-2007, 18:38
Un modo (anche se poco ortodosso a mio modo di vedere, secondo me ci sarebbe da rivedere un po' la progettazione delle classi) di risolvere il tuo problema è di passare la seconda classe come parametro del costruttore della GUI.

Ovvero, il costruttore della GUI diventa

classeGUI
{
secondaClasse sc;
CostruttoreGUI (secondaClasse sc)
{
this.sc = sc

Ovviamente, l'inizializzazione della GUI dentro secondaClasse diventerebbe

myGui = new GUICliente(this);



In questo modo, puoi richiamare dall'interno della GUI i metodi di secondaClasse sul membro sc. Anche se, ripeto, credo sia più ovvio avere una classe che fa da controller e richiama i metodi della GUI piuttosto che l'inverso, ma non conosco i dettagli della tua applicazione