GUI IN JESS

di il
4 risposte

GUI IN JESS

Ciao a tutti... sto cercando di creare una GUI in jess... non avendo mai creato interfacce in vita mia ho un po' di difficolTà... forse voi essendo più capaci di me in java potreste darmi una mano... per il momento sto facendo solo dei tentativi

(import javax.swing.*)
(import java.awt.event.*)
(import javax.swing.JFrame)
(import javax.swing.JPanel)



(defglobal ?*f* = (new JFrame "Button Demo"))
(?*f* setLocation 500 500)
(?*f* setSize 400 400)
(defglobal ?*b* = (new JButton "INIZIO TRIAGE"))
(defglobal ?*s* = (new JPanel))
(defglobal ?*l* = (new JLabel "TRIAGE"))
(defglobal ?*p* = (get ?*f* contentPane))
;(?*f* add ?*p*)
(?*p* add ?*s*)
(?*s* add ?*b*)
(?*s* add ?*l*)
(?*b* addActionListener (implement ActionListener using (lambda (?name ?event)
	(run 1))))
(?*f* pack)
(?*f* validate)
(?*f* show)
(deffunction frame-handler (?event)
  (if (= (?event getID) (get-member ?event WINDOW_CLOSING)) then 
    (call (get ?event source) dispose)
    (call java.lang.System exit 0)))


;****REGOLA INIZIO****
(defrule inizio 
        (initial-fact)	
=>
	(bind ?*n* (new JPanel))
	(?*p* add ?*n*)
	(?*b* setText "SISTEMA ESPERTO")
	(?*n* add ?*l*)
	(?*b* setText "AVVIO")
	(?*n* add ?*b*)
	(?*b* addActionListener (implement ActionListener using (lambda (?name ?event)
	(run 1))))
	;(?*f* setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE))
	(set ?*f* visible TRUE)
	;****************************
  (?*f* addWindowListener
        (new jess.awt.WindowListener frame-handler (engine)))
  (?*f* validate)
  (?*f* pack)
  (?*f* show)
	;****************************
	(printout t crlf)
	(printout t "********************************************SISTEMA ESPERTO********************************************"crlf)
	(printout t crlf)
	(printout t "************************************************TRIAGE*************************************************"crlf)
	(printout t crlf)
	(assert(acquisizione_dati))
)
Dunque vi spiego un po' il mio problema qual'è...
il primo bottone mi manda in run il sistema esperto, all'attivazione della prima regola si apre una nuova finestra con le modifiche apportate al bottone e alla label... ora io invece vorrei che queste modifiche fossero apportate nella prima finestra... quindi non voglio che si apra una seconda finestra vorrei che sempre nella stessa finestra iniziale cambi il nome della label e del bottone
spero di essere stata chiara...
GRAZIE

4 Risposte

  • Re: GUI IN JESS

    Suppongo che in tutto il forum ci soltanto un'altra persona che sa che cosa e' Jess ed in grado di leggere la sintassi che stai utilizzando

    Il tuo problema e' banale: se non vuoi una nuova finestra, non crearla.

    Nel tuo codice ci sono due 'new JPanel()' ... quindi due finestre
  • Re: GUI IN JESS

    Ciao grazie mille per avermi risposto...
    comunque ho fatto questo tentativo cercando di seguire il tuo consiglio
    
    (import javax.swing.*)
    (import java.awt.event.*)
    (import javax.swing.JFrame)
    (import javax.swing.JPanel)
    
    (defglobal ?*f* = (new JFrame "Button Demo"))
    (?*f* setLocation 200 100)
    (?*f* setSize 300 150)
    (defglobal ?*b* = (new JButton "INIZIO TRIAGE"))
    (defglobal ?*s* = (new JPanel))
    (defglobal ?*l* = (new JLabel "TRIAGE"))
    (defglobal ?*p* = (get ?*f* contentPane))
    
    (?*p* add ?*s*)
    (?*s* add ?*l*)
    (?*s* add ?*b*)
    
    (?*b* addActionListener (implement ActionListener using (lambda (?name ?event)
    	(run 1))))
    ;(?*f* pack)
    (set ?*f* visible TRUE)
    (?*f* setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE))
    
    
    
    
    ;****REGOLA INIZIO****
    (defrule inizio 
            (initial-fact)	
    =>
    	
    	(?*l* setText "SISTEMA ESPERTO")
    	(?*s* add ?*l*)
    	(?*b* setText "AVVIO")
    	(?*s* add ?*b*)
    	(?*s* validate)
    	(?*b* addActionListener (implement ActionListener using (lambda (?name ?event)
    	(run 1))))
    	;(?*f* refresh)
      	(?*f* show)
    
    	;****************************
    	(printout t crlf)
    	(printout t "********************************************SISTEMA ESPERTO********************************************"crlf)
    	(printout t crlf)
    	(printout t "************************************************TRIAGE*************************************************"crlf)
    	(printout t crlf)
    	(assert(acquisizione_dati))
    )
    
    il risultato sono cmq due finestre e nella seconda finestra (che si chiama comunque demo button) non visualizza niente
  • Re: GUI IN JESS

    Purtroppo non ho piu' un ambiente Java sotto mano, quindi non riesco a testare il codice.

    Ma anche senza, basta ragionare:

    in
    
    
    (defglobal ?*f* = (new JFrame "Button Demo"))
    (?*f* setLocation 200 100)
    (?*f* setSize 300 150)
    (defglobal ?*b* = (new JButton "INIZIO TRIAGE"))
    (defglobal ?*s* = (new JPanel))
    (defglobal ?*l* = (new JLabel "TRIAGE"))
    (defglobal ?*p* = (get ?*f* contentPane))
    
    (?*p* add ?*s*)
    (?*s* add ?*l*)
    (?*s* add ?*b*)
    
    (?*b* addActionListener (implement ActionListener using (lambda (?name ?event)
       (run 1))))
    ;(?*f* pack)
    (set ?*f* visible TRUE)
    
    crei la tua bella form inizial. Ovviamente questa form deve essere completa, con tutti i controlli!

    Dopo di che esegui il seguente codice:
    (defrule inizio
            (initial-fact)   
    =>
       
       (?*l* setText "SISTEMA ESPERTO")
       (?*s* add ?*l*)
       (?*b* setText "AVVIO")
       (?*s* add ?*b*)
       (?*s* validate)
       (?*b* addActionListener (implement ActionListener using (lambda (?name ?event)
       (run 1))))
       ;(?*f* refresh)
         (?*f* show)
    
    A che serve?
    Ragiona! Hai la tua form, quindi qui

    1) cambi il testo di alcuni controlli (va bene)
    2) riaggiungi i controlli al panello. Ma perche'?
    3) aggiungi un nuovo listener. Ma perche'?
    4) richiaimi il metodo show della form. Ma perche'?

    Non devi inventarti miracolosi meccanismi di aggironamento.
    Il tutto deve essere semplice:

    1) crei la form (aggiungi i controlli, registri le callback)
    2) la visualizzi
    3) aggiorni il contenuto dei controlli
    4) fine

    Quindi, fondamentalmente, il 50% del codice che hai scritto e' dannoso.
  • Re: GUI IN JESS

    Certe cose le ho aggiunte per tentativi... Hai ragione quando dici ragiona ma per esempio se non aggiungo un nuovo listner non mantiene le proprietà del bottone.... Cioè il bottone all'inizio fa run(1) ma la seconda volta non fa più niente.... Credo che sto utilizzando proprio un approccio sbagliato allo studio di sta cosa... Non posso procedere a tentativi.... Comunque ora ho trovato la documentazione ed effettivamente inizio a capirci qualcosa... Grazie mille per avermi risposto... Appena faccio qualche progresso ti tengo aggiornato
Devi accedere o registrarti per scrivere nel forum
4 risposte