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

    Awt

    Salve ho un piccolo problema !!!

    Sto imparando la libreria AWT per poter fare le GUI che mi servono… Ora per creare semplici menu è semplice, ma ho trovato difficoltà nell’utilizzare la libreria AWT per poter disegnare. La cosa principale da fare è estendere la classe Canvas ed fare l’override del metodo paint:

    public class MyCanvas extends Canvas {
    public void paint(Graphics g) {
    g.drawString("java",10,10);
    g.setColor(Color.red);
    g.drawLine(10,5, 35,5);
    }
    }

    Ora però ho problemi nella classe che contiene il metodo main, infatti ho creato un’altra classe:

    public class Inizio{
    public static void main(String[]args){

    //Creo l’oggetto per chiamare il metodo paint;

    MyCanvas oggetto = new MyCanvas();

    oggetto.print();

    }
    }

    però non so cosa passargli al metodo…pensavo che si dovesse fare:

    oggetto.print(g); però così non funziona…cosa devo passargli?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    La classe Canvas è un componente grafico che va incluso, perlomeno, all'interno di una finestra (classe Frame).
    Se non hai una finestra dove visualizzare la tua canvas non potrai mai vedere niente.

    Devi creare una classe che estende Frame, al suo interno aggiungerai la classe che estende Canvas... punto e basta perchè l'oggetto Graphics è un oggetto che viene costruito direttamente dalla JVM e passato automaticamente da lei.

    Il metodo paint() non lo richiami tu, si arrangia lei.


    Detto questo: perchè non inizi subito con Swing, dato che AWT non è più consigliato nemmeno della stessa Sun?


    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

  3. #3

    Thanks

    Grazie lele, ho accettato il tuo consiglio e mi sono dedicato ai swing e devo dire che mi trovo meglio, infatti i problemi che ho avuto con AWT ora non li ho con SWING, però mi sono immerso in un altro problemino:P

    Dopo aver creato il panel, ho colorato quest’ultimo (mediante i tantissimi metodi che offre), ma ho trovato difficoltà nell’inserire un’immagine… ecco il codice:


    P.S

    il problema mi viene dato quando vado a chiamare il metodo drawImage, non capisco perchè...


    package swingcomplesso;
    import java.awt.*;
    import javax.swing.*;

    //Dichiaro la classe;
    public class MyPanel extends JPanel{

    //Dichiaro il metodo costruttore per passargli un'immagine;
    public MyPanel(){

    //Dichiaro l'attributo;
    Image image;


    //Aggiungo l'immagine al pannello;
    //Recupero l'oggetto Image mediante Toolkit;
    Toolkit toolkit = Toolkit.getDefaultToolkit();

    //Recupero l'oggetto Image;
    image = toolkit.getImage("Goku.jpg");

    //Dichiaro il MediaTracker;
    MediaTracker mediaTracker = new MediaTracker(this);
    mediaTracker.addImage(image, 1);

    //Lancio l'eccezione;
    try{
    mediaTracker.waitForID(1);
    }

    catch(InterruptedException e){
    e.printStackTrace();
    System.out.println("Si è verrificato un problema nel caricare l'immagine");
    }

    }

    //Dichiaro il metodo;

    @Override //Annotazione
    public void paintComponent(Graphics g){
    super.paintComponent(g);

    g.setColor(Color.ORANGE);
    g.fillRect(20, 20, 100, 800);

    //Recupero l'immagine;

    g.drawImage(image, 20, 20, null);
    }
    }

  4. #4

    ...

    ops, l'errore non me lo da piu', l'attributo Image image; dovevo dichiararlo prima del costruttore, ehehh...soltanto che l'immagine non me la fa apparire lo stesso, facendo nomeimmagine.gif, l'immagine deve trovarsi nella stessa cartella nella quale si trova quella determinata classe giusto?

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

    Re: ...

    Originariamente inviato da Lestat_39
    l'immagine deve trovarsi nella stessa cartella nella quale si trova quella determinata classe giusto?
    Per essere più precisi, la cerca nella "current working directory", ovvero la directory che è corrente quando è stata avviata la JVM. E che non è detto che sia quella dove ci sono le classi.

    P.S. 1: quando fai:
    g.drawImage(image, 20, 20, null);

    Non passare l'ultimo a null ma passa this ovvero il reference al tuo pannello. È utile per l'aggiornamento della immagine (specialmente se la immagine fosse una GIF animata!).
    Potresti anche evitare il wait con il MediaTracker. Perché la visualizzazione sarebbe "incrementale". L'ultimo parametro è un ImageObserver e il tuo pannello farebbe da "observer". Man mano che i dati della immagine sono disponibili, il pannello verrebbe notificato e si ridisegnerebbe da solo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6

    ...

    quindi lo script è giusto...basta soltanto mettere l'immagine nella cartella giusta... current working directory.... sarebbe?

  7. #7

    ...

    Hai il mio stesso problema Darkassa?

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.