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

    Aiuto facile sul disegno delle linee

    Ho mal di testa e per domani devo consegnare al mio professore questo script funzionante.
    Lo script è composto da due metodi e crea delle linee random e le stampa a schermo. Lo eseguo e non mi stampa nulla.

    nome classe LineeRandom:
    Codice PHP:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.geom.*;
    import java.awt.font.*;
    import java.util.*;

    public class 
    LineeRandom extends JFrame{

        public 
    LineeRandom() {
            
            
           
    //creo un pannello di nome foglio che mi servirà per disegnare le 200 linee
            
    foglio = new JPanel(); 
          
           
    //allineo il pannello foglio in centro
            
    getContentPane().add(foglio,"Center");        
           
           
    //definisco la finestra
            
    setTitle("Linee Random");
            
    setSize(300,300);
            
    setLocation(100,100);
            
    setDefaultCloseOperation(HIDE_ON_CLOSE);
            
    setVisible(true);
            
        } 
    //fine metodo

        
         
    public void paintComponent(Graphics g) {
            
    paintComponent(g);
            
    Graphics2D foglio = (Graphics2D)g;
           
    //creo un array di 200 posti
            
    Line2D.Double[] linee = new Line2D.Double[200];
         
           
    /*con un for che parte da 0 e che arriva fino alla lunghezza dell'array
           definisco poi con un random le posizioni delle linee*/
            
    for (int i 0; (linee.length); i++)
                
    linee[i] = new Line2D.Double(10,80,60,90);
                
           
    //con un'altro for le disegno
            
    for (int i 0; (linee.length); i++)
                
    foglio.draw(linee[i]);       
         } 
    //fine metodo
        
         
    private JPanel foglio//attributo di classe

    Ovviamente al posto di (10,80,60,90) metto un bel math.random per fare in modo che le linee escano a casaccio.

    Dove puo' essere il problema?

    grazie infinite

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Cerca di organizzare meglio il lavoro...

    Per esempio, il pannello su cui disegni potrebbe essere definito in un'apposita classe... poi che utilità ha definire il JPanel foglio e nasconderlo nel paintComponent con un altro oggetto (di natura completamente diversa...) ?

    codice:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.geom.*;
    import java.awt.font.*;
    import java.util.*;
    
    public class LineeRandom extends JFrame {
        
        private class DrawingPanel extends JPanel {
            
            private int numLinee;
            Random r = new Random();
            
                    
            public DrawingPanel(int numLinee) {
                this.numLinee = numLinee;
            }
            
            public void paintComponent(Graphics g) {
                Graphics2D f = (Graphics2D)g;
                //creo un array di ... posti
                Line2D.Double[] linee = new Line2D.Double[numLinee];
                
                /*con un for che parte da 0 e che arriva fino alla lunghezza dell'array
                 definisco poi con un random le posizioni delle linee*/
                for (int i = 0; (i < linee.length); i++) {
                    linee[i] = new Line2D.Double(r.nextDouble()*this.getWidth(), r.nextDouble()*this.getHeight(),            
                        r.nextDouble()*this.getWidth(), r.nextDouble()*this.getHeight());
                    f.draw(linee[i]); 
                }
            }
                
                
        }
        
        public LineeRandom() {
            this(20); // 20 linee
        }
    
        public LineeRandom(int numLinee) {
                 
            setTitle("Linee Random");
            setSize(300,300);
            setLocation(100,100);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setVisible(true);
            this.getContentPane().add(new DrawingPanel(numLinee));
            
        } 
    
            
              
         public static void main (String[] args) {
             new LineeRandom();
         }
    }
    Occhio che in questo modo le linee verranno ridisegnate ogni volta che ridimensionerai la finestra
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Grazie!
    scusa per la perdita di tempo.
    D'ora in avanti classi separate.

    Grazier ancora

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

    Re: Aiuto facile sul disegno delle linee

    Originariamente inviato da oRpo
    Codice PHP:
    public class LineeRandom extends JFrame{
       
         public 
    void paintComponent(Graphics g) {
            
    paintComponent(g);
            
    Graphics2D foglio = (Graphics2D)g;
            ...... 
    Innanzitutto paintComponent() è solo per i componenti Swing che derivano da JComponent. JFrame non deriva da JComponent e pertanto il tuo metodo paintComponent non ha alcun effetto e non viene affatto invocato. Se anche venisse invocato, andrebbe in loop poiché richiama sé stesso, lanciando ad un certo punto un bel StackOverflowError.
    Semmai ci sarebbe da fare super.paintComponent(g);

    Se vuoi disegnare qualcosa, crea una classe che estende ad esempio JPanel e in quella fai l'override di paintComponent().
    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 © 2026 vBulletin Solutions, Inc. All rights reserved.