Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    3

    Come si usa il metodo repaint() di java AWT?????

    Salve a tutti,

    Allora ho un problema nell'utilizzare il metodo repaint(). In pratica, sto disegnando su un componente di tipo Canvas e quello che dovrei fare è ridisegnare sullo stesso componente ogni volta che viene generato un evento tramite un oggetto di tipo JComboBox ma non riesco a farlo nonostante usi il metodo repaint() ogni volta che viene generato l'evento.

    Mi spiego meglio illustrando anche il codice, cosi forse rendo meglio il problema:

    codice:
    public class MyClass extends JFrame{
    ......
    ......
    ......
    ......
    ......
    GridPanel gridPanel = new GridPanel();
    JPanel panel1 = new JPanel();
    comboBox = new JComboBox(.......);
    Panel1.add(comboBox);
    comboBox.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            new GridPanel(comboBox, e );
    	}
     });
     super.add(panel1);
     super.add(gridPanel);
    }
    Da come si puo vedere dal codice, ho creato una JComboBox e l'aggiungo nel pannello Panel1 all'interno di un JFrame. A questo punto, ogni volta che seleziono un Item nella comboBox devo ridisegnare una griglia tramite la classe GridPanel che è una sottoclasse di Canvas e che a sua volta si trova nello stesso JFrame. Il codice di GridPanel è il seguente:

    codice:
    public class GridPanel extends Canvas{
    	
    	JComboBox comboBox;
    	ActionEvent evt
    
        public GridPanel() {} // costruttore vuoto
    
        public GridPanel( JComboBox cb, ActionEvent e) {
        	
        	this.comboBox = cb;
        	this.evt = e;
        	repaint();   	
        	
        }
    
        public void paint(Graphics g) {
    
           if(comboBox.getSelectedItem().toString().equalsIgnoreCase(".......")){
    		
                 // codice che disegna/ridisegna la griglia sul componente Canvas		
           }
           if(comboBox.getSelectedItem().toString().equalsIgnoreCase("......")){
    		
                 // codice che disegna/ridisegna la griglia sul componente Canvas		
           }
    
          .........
          ........
          ........
          ecc ecc
        }
    Ora il problema è che ogni volta che invoco il costruttore di GridPanel quando si genera un evento dalla comboBox( vedi codice sopra in MyClass ) non mi ridisegna niente!!

    Qualcuno sarebbe cosi gentile da darmi delle diritte in merito al perche non mi funziona il metodo repaint()??? ...... Forse non va usato in questo modo?!?!?

    Grazie Anticipatamente.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Come si usa il metodo repaint() di java AWT?????

    Originariamente inviato da dancko
    codice:
        public void paint(Graphics g) {
    
           if(comboBox.getSelectedItem().toString().equalsIgnoreCase(".......")){
    		
                 // codice che disegna/ridisegna la griglia sul componente Canvas		
           }
           if(comboBox.getSelectedItem().toString().equalsIgnoreCase("......")){
    		
                 // codice che disegna/ridisegna la griglia sul componente Canvas		
           }
    No, mi spiace, approccio sbagliato. Che nel paint() tu faccia tutto quello sopra, andando a "guardare" altri componenti è molto dubbio/fumoso.

    No, semplicemente dovresti fare questo: il tuo componente GridPanel dovrebbe offrire dei metodi es. setQualcosa(). Questi si occuperanno solo di aggiornare qualcosa nello "stato" (variabili di istanza) del tuo componente e in più di invocare repaint() (una delle varie versione, dipende ...). E il tuo componente poi si aggiornerà di conseguenza da solo a causa dei repaint.

    Hai presente un normalissimo pulsante es. JButton? Se fai mioPulsante.setText("....") mica sei tu che devi preoccuparti di aggiornare lo stato (il testo all'interno del pulsante) e di invocare repaint .... lo "sa" e lo fa il pulsante tramite il metodo.
    Insomma ... ragiona così e verrà tutto meglio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    3
    Ok, perfetto ho capito in che modo bisognerebbe ragionare. Ero completamente fuori binario. Ora ci provo, magari se ho delle difficolta mi rifaccio vivo


    Grazie mille

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    Come indicato nel Regolamento interno (punto 6), il codice va postato indentato all'interno degli appositi tag CODE, altrimenti risulta incomprensibile.


    Aggiusto il tuo post, in futuro pensaci tu.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    3
    Si hai ragione LeleFT, ad essere sincero l'ho letto di sfuggita il regolamento per fare in fretta. Comunque chiedo scusa a tutti e me lo rileggero meglio il regolamento

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.