Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    18

    [JAVA] Applicazione Grafica

    Ho un esercizio da svolgere e non ho la minima idea di come svolgerlo: devo disegnare un'ellisse in un frame in modo tale che tocchi i bordi del frame e devo fare in modo che l'ellisse si ridimensioni automaticamente quando si ridimensiona il frame. La prima parte l'ho risolta ma come diavolo si fa a ridimensionare automaticamente la forma grafica in funzione delle dimensioni del frame? E' un pomeriggio che ci sbatto, vi prego aiutatemi!!!

    Ecco il listato del visualizzatore del frame e del componente che disegna l'ellisse:

    import javax.swing.JFrame;
    public class EllisseV
    {
    public static void main(String[] args)
    {
    JFrame frame = new JFrame();
    frame.setSize(515, 335);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);

    EllisseC ellisse = new EllisseC();
    frame.add(ellisse);

    frame.setVisible(true);
    }
    }

    ---------------------------------------

    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Color;
    import java.awt.geom.Ellipse2D;
    import javax.swing.JComponent;
    public class EllisseC extends JComponent
    {
    public void paintComponent(Graphics g)
    {
    Graphics2D g2 = (Graphics2D) g;

    Ellipse2D.Double ellipse = new Ellipse2D.Double(0, 0, 500, 300);

    g2.setColor(Color.GREEN);
    g2.fill(ellipse);

    }
    }


    Grazie anticipatamente

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

    Moderazione

    Java ha un suo sub-forum dedicato.
    Posta lì le tue discussioni sull'argomento in seguito.

    Ti sposto.


    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
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Applicazione Grafica

    Originariamente inviato da Ghneuma
    come diavolo si fa a ridimensionare automaticamente la forma grafica in funzione delle dimensioni del frame?
    Il tuo componente EllisseC l'hai aggiunto in un JFrame. In un JFrame il layout-manager di default nel content pane è BorderLayout e un componente aggiunto senza specificare un constraint viene messo nel CENTER, che è la parte che si può espandere per occupare tutto lo spazio.

    In sostanza vuol dire che il tuo componente viene già ridimensionato automaticamente per occupare tutto lo spazio nel JFrame.

    Nel tuo paintComponent ti rimane solo da: a) invocare super.paintComponent(g) per fare il painting predefinito e poi b) disegnare l'ellisse. Le dimensioni da usare le ricavi davvero banalmente dalle dimensioni del tuo componente: getWidth() e getHeight()
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    18
    Grazie infinite, sei stato gentilissimo!

  5. #5
    io ho lo stesso problema ti posto il codice:

    import javax.swing.JFrame;

    public class EllisseViewer
    {
    public static void main(String[] args)
    {
    JFrame frame = new JFrame();
    frame.setSize(511, 330);
    frame.setTitle("Ellisse");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);

    EllisseComponent component = new EllisseComponent();
    frame.add(component);
    frame.setVisible(true);
    }

    }

    --------------------------------------------------------------------------------------------------------------------------

    import java.awt.Color;
    import javax.swing.JComponent;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.geom.Ellipse2D;
    import java.awt.Rectangle;

    public class EllisseComponent extends JComponent
    {
    public void paintComponent(Graphics g)
    {
    Graphics2D ellisse = (Graphics2D) g;
    super.paintComponents(ellisse);
    Ellipse2D.Double elli = new Ellipse2D.Double(0, 0, 500, 300);
    ellisse.setColor(Color.black);
    ellisse.fill(elli);
    ellisse.draw(elli);


    }

    }


    Purtroppo il problema continua, quando eseguo il programma e ridimensiono il frame questo mi taglia l'ellisse e non me la ridimensiona come dovrebbe. Non riesco a capire il problema eppure ho inserito super.paintComponent come suggerito da te

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da torment666
    Graphics2D ellisse = (Graphics2D) g;
    super.paintComponents(ellisse);
    Devi fare la chiamata con super a paintComponent non paintComponents.

    Originariamente inviato da torment666
    Purtroppo il problema continua, quando eseguo il programma e ridimensiono il frame questo mi taglia l'ellisse e non me la ridimensiona come dovrebbe. Non riesco a capire il problema eppure ho inserito super.paintComponent come suggerito da te
    Rileggi bene l'ultimo paragrafo che ho scritto nel precedente messaggio. Parlavo di leggere le dimensioni dal componente ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok allora la prima è stata una svista >< capita ^^

    Per il secondo punto, l'ho letto ma non capisco a che serve, cioè devo mettere (prendendo il mio esempio) nella classe EllisseComponent, elli.getWidth() e elli.getHeight(). Devo fare cosi? Se si perche?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da torment666
    Per il secondo punto, l'ho letto ma non capisco a che serve, cioè devo mettere (prendendo il mio esempio) nella classe EllisseComponent, elli.getWidth() e elli.getHeight(). Devo fare cosi?
    No.

    Ricapitoliamo: il JFrame che hai creato è ridimensionabile. Il tuo componente l'hai messo nel JFrame e viene messo nella parte CENTER del BorderLayout. Ciò significa che il tuo componente occupa tutto lo spazio possibile ... quindi essendo il JFrame ridimensionabile, pure il tuo componente si ridimensiona di pari passo con il JFrame.

    Ora ... se si ridimensiona, tu dovresti andare a leggere le dimensioni del tuo componente (non del Ellipse2D.Double!). Quali sono? Semplice, JComponent ha getWidth()/getHeight(). Userai queste informazioni per dimensionare il Ellipse2D.Double da disegnare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Mmm non sto capendo..allora il mio componente cioè la mia ellisse è Ellipse2D.Double elli = new Ellipse2D.Double(0, 0, 500, 300); e quindi la variabile elli disegnerà un ellisse con cordinate 0,0 larghezza 500 e altezza 300. Se si ridimensiona il frame, JFrame andrà a leggere sempre quello coordinate. getWidth()/getHeight() li posso usare solo su elli che è la mia ellisse ma il risultato sarebbe che mi legge 500/300 quindi cosa mi cambia? Scusa se non sto capendo ma sono alle prime armi e ci metto un pò ><


    ps. Io in pratica voglio che ogni volta che dal programma in esecuzione con il mouse ridimensione la finestra l'ellisse si adatti al frame occupandolo sempre tutto

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da torment666
    Mmm non sto capendo..allora il mio componente cioè la mia ellisse è Ellipse2D.Double elli = new Ellipse2D.Double(0, 0, 500, 300); e quindi la variabile elli disegnerà un ellisse con cordinate 0,0 larghezza 500 e altezza 300.
    Ancora no.

    Il tuo componente è EllisseComponent che è-un JComponent perché lo estende. Ellipse2D.Double non è un componente AWT/Swing ... è una normalissima classe che contiene solo le proprietà che rappresentano "un ellisse", una forma geometrica e basta.

    L'ellisse lo devi creare e disegnare della dimensione del tuo componente e quindi devi prima determinare la dimensione del tuo componente. Visto che ogni componente Swing ha i metodi getWidth()/getHeight(), usi appunto questi dimensionare l'ellisse.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.