Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62

    [Java] Gui Per Albero binario

    Ciao a tutti, sto implementando un progetto per l'università, il progetto prevede l'implementazione di un composite data la grammatica e un visitor che ne permetta la stampa, bene ho fatto tutto, il composite viene generato da un builder che riceve una stringa contenente i valori tramite un gestore input (che passa carattere per carattere diciamo).

    Ora il progetto prevede la grafica, vorrei disegare l'albero composite genrato, ho provato varie strade, e molte ricerche su internet ma con scarsissimi risultati, ora sto provando a disegarlo con graphics2d, ma ho davvero serie difficoltà, qualcuno saprebbe consigliarmi un metodo o un sistema più semplice, magari se è possibile customizzare un Jtree in modo da renderlo albero binario? O magari esiste qualcosa di pronto che non conosco....
    Grazie a tutti, sono aperto ad ogni tipo di consiglio.

  2. #2
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    io sto ancora conbattendo con graphics e cercando qualcosa che mi possa aiutare a risolvere la sutiazione con qualcosa di pronto ho trovato una cosa interessante ma siceramente non ho capito bene come funziona questa libreria trovata su questo sito ma siceramente non ho capito come usare questi oggetti messi a disposizione, se qualcuno la conosce magari può darmi una mano.
    Io praticamente vorrei disegnare un albero aggiungendo nodo per nodo! inta mostro il lavoro che ho fatto fino ad ora solo che dovrei estrapolare un algortmo per disegare passando punto per punto....

    codice:
    public class NodoTreeLabel extends JLabel {
        private int dimensionex,dimensioney;
        private String testo;
        int a,b,h,w,x,y;
       
       
       
        public NodoTreeLabel(String testo,int dimensionex, int dimensioney){
           
        super();
        this.testo=testo;
        this.dimensionex=dimensionex;
        this.dimensioney=dimensioney;
        x=dimensionex/2;
        y=dimensioney/8;
        h=dimensioney/8;
        w=dimensionex/8;
        a=dimensionex/4;
        b=a*3;
        }
       
       
       
        @Override
        public void paint(Graphics g){
            super.paint(g);
            drawNodes(g, g.getFontMetrics(), x, y);
            p(g,a,b,x,y);      
            p(g, a+w, a-w, a, y+h);
            p(g, b+w, b-w, b, y+h);
           
       
        }
        private void p(Graphics g,int a,int b,int x,int y){
        drawNodes(g, g.getFontMetrics(), a, y+h);
        g.drawLine(x+5, y+10, a, y+h);
        drawNodes(g, g.getFontMetrics(), b, y+h);
        g.drawLine(x-5, y+10, b, y+h);
        }
       
       
       
        private void drawNodes(Graphics bg, FontMetrics fontmetrics,int ascisse,int ordinate) {
            int k = fontmetrics.stringWidth(testo) + 10;
            int l = fontmetrics.getHeight() + 4;
            Color color;
            Graphics2D g=(Graphics2D)bg;
           g.setColor(Color.LIGHT_GRAY);
            g.fillOval(ascisse - k / 2, ordinate - l / 2, k, l);
    //        g.setColor(Color.BLUE);               
           
            g.drawOval(ascisse - k / 2, ordinate - l / 2, k - 1, l - 1);
           
            g.setColor(Color.black);
            g.drawString(testo, ascisse - (k - 10) / 2, (ordinate - (l - 4) / 2) + fontmetrics.getAscent());
            g.setColor(Color.LIGHT_GRAY);
        }
       
    
       
       
    }
    dovrei cercare di estrapolare l'algortmo per mettere le coordinate in automatotico passando stringe contenenti quello che voglio stampare

  3. #3
    Utente di HTML.it L'avatar di yuno
    Registrato dal
    Apr 2010
    Messaggi
    62
    Visto che ho fatto il post e purtroppo nessuno ancora mi ha aiutato, continuo a mettere le soluzini che trovo, credo che questa volta ci siamo! solo che ancora mi serve l'aiuto di qualche esperto, che sono sicuro che su questo forum cene sono!
    Allora la mia idea e di mettere un JPanel centrale con un GridLayout(N,1) in modo da avere N livelli per ogni livello ci sarà un altro pannello con il FlowLayout(FlowLayout.CENTER), adesso facendo la visita a livelli dell'albero posso mettere per ogni livello il numero dei nodi che ci sono!
    i nodi sono rappresentati da un label con il bordo dove nel text ho scritto l'informazione...
    questo è il codice:
    codice:
    public class ProvaGui {
    
        public static void main(String []args){
         JFrame finestra=new JFrame();
         JTreePanel jtp=new JTreePanel();//pannello centrale
         JPanel root[]=new JPanel[3];
         //livelli
         root[0]=new JPanel(new FlowLayout(FlowLayout.CENTER,30,10));
         root[1]=new JPanel(new FlowLayout(FlowLayout.CENTER,30,10));
         root[2]=new JPanel(new FlowLayout(FlowLayout.CENTER,30,10));
         
         ProvaNodo[] eAndiamo=new ProvaNodo[3];
         eAndiamo[0]=new ProvaNodo("*");//root
         eAndiamo[1]=new ProvaNodo("22");//figlio sin
         eAndiamo[2]=new ProvaNodo("30*a");//figli Dex
         
         //aggiungiamo Root
         root[0].add(eAndiamo[0]);
         //aggiungiamo i nodi di root a lvl 2
         root[1].add(eAndiamo[1]);
         root[1].add(eAndiamo[2]);
         //aggiungiamo al pannello principale i livelli
         jtp.add(root[0]);
         jtp.add(root[1]);
         jtp.add(root[2]);
         
         finestra.add(jtp,BorderLayout.CENTER); 
         finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         finestra.setSize(500,500);
         finestra.setVisible(true);
        }
    }
    adesso notato che l'idea funziona sarebbe bello inserire un metodo che disegna una linea dalla radice al nodo figlio, mi chiedo se qualcuno sa dirmi come prendermi le coordinate dei componenti per fare questa operazione.
    Poi chi dovrebbe farlo il pannello dove ci sono tutti i livelli giusto (centrale)?

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.