Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [JAVA] Ridisegnare JDialog!!

    Salve a Tutti, ecco il mio nuovo dilemma!!

    Dunque....
    La classe FrameB() e un JFrame ( public class FrameB extends JFrame...... )
    istanziata nella classe main: FrameB home = new FrameB();

    In FrameB() un JButton apre una JDialog in setModal(true) senza istanziarla,
    cioè: if (e.getSource().equals(openBtn)) { new FrameB1(); }

    Nella JDialog ( public class FrameB1 extends JDialog...... ) vi sono diversi
    componenti grafici, di cui i più importanti sono....
    un "local" JPanel container impostato come setContent() della JDialog
    ............................|
    ............................|-> "field private" JScrollPane boxScroll
    .................................................. .........................|
    .................................................. .........................|-> "field private" JPanel box

    All'interno di box ho un determinato numero di altri componenti
    di tipo campi di testo (JLabel, JTextField etc) il cui numero e contenuto
    è soggetto a variazione da parte dell'utente.
    In un altro JPanel contenuto da container ho una serie di JButton
    tra cui uno che salva i dati inseriti, o meglio:
    codice:
    if (e.getSource().equals(salva)) {
         boolean modifiche = new Controlli(indiceA, indiceB, tempA.getText(), tempB.getText()).get();
         if (modifiche) { dispose(); }
    }
    .... li manda alla classe Controlli che esegue dei controlli e restituisce una boolean
    che se true chiude il JDialog.

    Quello che vorrei realizzare e ridisegnare il JPanel box anziché chiuderlo
    dopo le operazioni avviate dal JButton salva ma non ci riesco!!

    Ho provato richiamando un metodo del tipo:
    codice:
    private void redraw() {
          scrollBox.remove(box);
          scrollBox.add(newBox());
          scrollBox.validate();
    }
    ... ma non funziona.

    Ho provato anche ad aggiungere un ascoltatore sulla chiusura
    nella classe FrameB su FrameB1, che in parte funziona, cioè mi
    rileva la chiusura ma non so per quale motivo me la rileva due
    volte!! ridisegnandomi così di fatto invece che uno, due nuovi
    JDialog!! Per non dire poi che nella classe dell'event mi va in un
    loop senza fine, ma di sicuro avrò sbagliato a progettare il codice!!

    Forse la JDialog non si presta a metodi di "ridisegno" e dovrei usare
    al suo posto un JFrame ed inventarmi un metodo per renderlo modal!!

    Chiedo suggerimenti a Voi esperti del linguaggio.
    Ciao

  2. #2
    Questione risolta.....

    è bastato lavorare all'interno della Classe FrameB1()
    creando un metodo per la creazione del JScrollPane boxScroll
    e del JPanel box, metodo che viene richiamato dopo che
    viene restiuita la boolen dalla Classe Controlli e dopo però
    aver rimosso la prima istanza di boxScroll dal container e
    quindi al container viene assegnata una nuova JScrollPane:
    container.add(drawBox(), BorderLayout.CENTER);

    Dopo basta un validate() e rapaint() sul JDialog

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io ho solo l'impressione che non hai progettato bene tutte le interfacce, le modalità di interazione tra le stesse e soprattutto non stai applicando il modello MVC che fidati ti semplifica la vita con le GUI
    RTFM Read That F*** Manual!!!

  4. #4
    Valia grazie per l'attenzione.
    Sicuramente sarà così, non sono esperto in questo,
    farò delle ricerche sul metodo MVC e lo studierò.
    Il mio è un approccio da neofita e trovo che la
    parte grafica in Java mi incasina tanto!!!

    PS: ho trovato questo documento , partirò da qui,
    se hai suggerimenti, per inniziare in italiano sarebbe meglio,
    te ne sarò grato.... ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.