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

    [java] classe Graphics

    Ho un problema con la classe Graphics: ho un JFrame in cui dovrei disegnare un cerchio, ma quando lo disegna, si vede solo per un attimo e poi scompare!
    In pratica il programma funziona così: cliccando e trascinando il mouse, l'utente definisce posizione e dimensione del cerchio che, una volta rilasciato il mouse, dovrebbe apparire, ma, come suddetto, l'immagine appare solo per un attimo e poi scompare...
    Per favore, aiutatemi!!!
    Grazie, ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    no codice, no help.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Voglio tentare di indovinare: hai ridefinito il metodo paint()!

    Se così è, prova a ridefinire il metodo paintComponent() al posto di paint().

    (Mi sa che qui mi vogliono copiare la lavagna... un progetto che ho realizzato per l'esame di OOP all'università... :master: )


    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

  4. #4

    Precisazione

    Il codice è molto complesso, credo sia complicato cercare di studiarlo... Il fatto è che ho provato anche con qualcosa di più semplice e mi dà lo stesso problema, vi posto questo codice:
    public class Prova
    {
    ...
    public Prova extends JFrame implements ActionListener
    {
    ...
    JComboBox j=new JComboBox();
    j.addActionListener(this);
    ...
    }

    public void actionPerformed(ActionEvent e)
    {
    JFrame f=new JFrame("prova");
    f.setSize(200,200);
    f.setVisible(true);
    Graphics g=f.getGraphics();
    g.drawRect(10,10,100,100);
    }
    ...
    }

    Il rettangolo nel JFrame "prova" appare solo per un attimo e poi scompare... Provando a spostare un pò di righe, a volte sono riuscito a far comparire il rettangolo, ma se ridimensiono la finestra, scompare!

    P.S.
    Preciso che mi dà lo stesso problema anche scrivendo g=f.getContentPane().getGraphics();

    P.P.S.
    Non ho toccato il metodo paint().

  5. #5

    Aiuto!!!!

    Nessuno ha idea di come potrei fare?
    Facendo un pò di prove, ho visto che se faccio il disegno (con la classe Graphics) in una Label (non JLabel perchè mi dà lo stesso problema!) il disegno compare correttamente e non scompare!
    Ho pensato che potrei risolvere così, mettando la Label col disegno nel JFrame, però mi si presenta un altro problema: come posso rendere la Label con lo sfondo trasparente?
    In pratica esiste per la classe Label un metodo analogo a SetOpaque della JLabel?

  6. #6
    Aggiornamento sul mio "dramma" (è per la tesi e non riesco ad andare avanti!!!!!!!).
    L'utilizzo della classe mi dà troppi altri problemi, per cui ho deciso di usare una JLabel contenente il disegno.
    Il problema è sempre lo stesso: il rettangolo appare solo per un attimo e poi scompare.
    Posto un esempio di codice:
    public class Prova implements ActionListener
    {
    public static void main (String args[])
    {
    Prova p=new Prova();
    }
    public Prova()
    {
    JFrame d=new JFrame("p");
    d.setSize(200,200);
    Container c=d.getContentPane();
    c.setLayout();
    JButton b=new JButton("apri");
    b.setBounds(50,50,100,30);
    c.add(b);
    b.addActionListener(this);
    d.setVisible(true);
    }
    public actionPerformed(ActionEvent e)
    {
    JFrame jf=new JFrame("ecco");
    JLabel jl=new JLabel();
    jf.setSize(150,150);
    jf.getContentPane().setLayout(null);
    jl.setBounds(10,10,100,100);
    Graphics gr=jl.getGraphics();
    gr.fillRect(10,10,70,50);
    }
    }
    Nessuno ha qualche idea?
    Qualcuno può dirmi se provando con questo codice ha il mio stesso problema?
    Per favore, aiutatemi!!!!

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Il disegno scompare perchè dopo che l'hai disegnato il metodo painComponent viene richiamato cancellandolo. paintComponent è il metodo che si occupa di disegnare ilcomponente ogni volta che ce n'è bisogno. E' ridfinendo tale metodo che ottieni un disegno persistente. Nel tuo metodo actionPerformed non devi effettuare il disegno, devi solo impostarti delle variabili in base alle quali effettuare il disegno. Ad esempio tale metodo si puo occupare di mettere a true un campo booleano. Il metodo paintComponent legge tale booleano; se vale true effettua il disegno. Inoltre devi impostare diversamente le cose. Devi creare una tua classe che estende JFrame a cui sarà aggiunto il tuo pannello col disegno. Questo deve esere istanza di una classe che estende JPanel e in cui ridefinisci il metodo paintComponent (che riceve l'oggetto Graphics del pannello come parametro).

    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

  8. #8

    Grazie

    Grazie Grazie Grazie!!!!!!
    Ho riscritto il metodo paintComponent ed è tutto ok!
    Grazie ancora!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.