Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75

    [JAVA GRAPHICS] Consiglio rappresentazione barra tacchettata

    Buongiorno,
    vorrei avere qualche consiglio su come poter andare a rappresentare in un pannello, con layout null quindi da gestire manualmente, una barra tacchetta. Una specie di righello diciamo, in cui ci sono tacche più grandi che rappresentano i cm e tacche più piccole per i millimetri. Devo gestire tutto con Line2D? Se si avevo pensato ad una linea verticale per la base, e poi una linea per ogni tacca orizzontale, e andare a scrivere il testo per i valori delle tacche. Mi sembra un po' troppo macchinoso, non c'è un altro modo?

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

    Re: [JAVA GRAPHICS] Consiglio rappresentazione barra tacchettata

    Originariamente inviato da gatsu85
    Una specie di righello diciamo, in cui ci sono tacche più grandi che rappresentano i cm e tacche più piccole per i millimetri. Devo gestire tutto con Line2D?
    Ti basta usare dei drawLine, chiaramente in un ciclo per fare più "tacche" e puoi farne di corte e di lunghe ogni tot.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75

    Re: Re: [JAVA GRAPHICS] Consiglio rappresentazione barra tacchettata

    Originariamente inviato da andbin
    Ti basta usare dei drawLine, chiaramente in un ciclo per fare più "tacche" e puoi farne di corte e di lunghe ogni tot.
    Grazie andbin, ora però ho un problema, ovviamente per disegnare devo necessariamente utilizzare il metodo paint, che viene richiamato ogni qualvolta faccio una repaint, io nel pannello in cui voglio aggiungere questa specie di righello ho già dei pannelli che faccio muovere con un timer, ho provato ad aggiungere il disegno di una linea con il metodo paint, ma questo mi causa problemi di visualizzazione, credo che il problema sia dovuto al fatto che vado a fare tutto in un unico pannello. come posso gestire diversamente la cosa? Io vorrei arrivare ad una situazione in cui ho pannelli che scorrono (e questo sono riuscito a farlo con un timer nel frame principale che ogni tot millisecondi sposta e ridisegna i pannelli in esso contenuti) , vorrei avere poi questa barra tacchettata fissa ad un lato sulla quale scorreranno dei quadratini legati ai pannelli che scorrono con un altra linea. Il rapporto pannelli quadratini pannelli che scorrono è 1 a 1, per ogni pannello ho un quadratino e una linea che li collega. Come mi approccio a questa cosa? per ora sono arrivato già con non poche difficoltà a far scorrere pannelli.

    Ah il tutto lo inserisco nel contentPane del frame principale.

    Avrei pensato anche a fare un pannello apposito per la barra e i quadratini che scorrono, ma poi come faccio a disegnare una linea che unisce oggetti grafici che si trovano in pannelli diversi dello stesso frame?

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

    Re: Re: Re: [JAVA GRAPHICS] Consiglio rappresentazione barra tacchettata

    Originariamente inviato da gatsu85
    ovviamente per disegnare devo necessariamente utilizzare il metodo paint, che viene richiamato ogni qualvolta faccio una repaint
    Lo dico sempre (l'ho detto anche in questi ultimi giorni sul forum in una discussione): nei componenti Swing il "contesto" di disegno è il metodo

    protected void paintComponent(Graphics)

    non paint. paint c'è, esiste ancora, è il punto di "ingresso" principale e pubblico di disegno e tecnicamente si può anche farne un override. Ma è più a monte, in quanto in Swing il disegno dei componenti è "fattorizzato" in 3 fasi di cui una è appunto paintComponent.
    Quindi è bene fare l'override di paint solo se si sa che cosa si sta facendo (e per buoni motivi).

    Originariamente inviato da gatsu85
    Io vorrei arrivare ad una situazione in cui ho pannelli che scorrono (e questo sono riuscito a farlo con un timer nel frame principale che ogni tot millisecondi sposta e ridisegna i pannelli in esso contenuti) , vorrei avere poi questa barra tacchettata fissa ad un lato sulla quale scorreranno dei quadratini legati ai pannelli che scorrono con un altra linea. Il rapporto pannelli quadratini pannelli che scorrono è 1 a 1, per ogni pannello ho un quadratino e una linea che li collega. Come mi approccio a questa cosa? per ora sono arrivato già con non poche difficoltà a far scorrere pannelli.

    Ah il tutto lo inserisco nel contentPane del frame principale.

    Avrei pensato anche a fare un pannello apposito per la barra e i quadratini che scorrono, ma poi come faccio a disegnare una linea che unisce oggetti grafici che si trovano in pannelli diversi dello stesso frame?
    Per quanto riguarda il disegno di questo "righello" da un lato, gli approcci possono essere svariati, 3 che me ne vengono in mente:

    1) Si sfruttano i layout manager, in pratica si fa in modo che in una area ci sia un pannellino che disegna solo questo righello e a fianco un altro pannello che contiene il resto.
    Una idea banale potrebbe essere BorderLayout: in WEST il righello e in CENTER il pannello che contiene il resto. Ma non è l'unica possibilità ovviamente.

    2) Si realizza un Border (implementazione di javax.swing.border.Border e in genere si parte dalla estensione di javax.swing.border.AbstractBorder per comodità).
    Tutti i componenti Swing possono visualizzare 1 Border. Un bordo può disegnare quello che vuole su uno o più lati del componente e al tempo stesso fornisce al componente gli "insets" affinché si possa scartare questo spazio. I layout manager ad esempio lo scartano, cioè dispongono i componenti in modo che non vadano certo sopra il bordo.

    Quindi il tuo "RighelloBorder" lo assegni nello stesso pannello dove andrai a mettere il resto dei componenti. Se come hai detto all'inizio non c'è layout manager devi preoccuparti tu di non andare a piazzare componenti sopra il bordo! (mi pare il minimo, no?)

    3) Fai un pannello specifico che disegna nel suo paintComponent il righello e questo pannello fa anche, allo stesso tempo, da "contenitore" per il resto dei componenti. Anche qui più o meno come 2) devi assicurarti che non si vada sopra il disegno del righello.


    Per quello che hai detto "disegnare una linea che unisce oggetti grafici che si trovano in pannelli diversi dello stesso frame", questo è più complicato ma è comunque fattibile e ci sarebbero da fare un po' di valutazioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75
    Per quanto riguarda il disegno di questo "righello" da un lato, gli approcci possono essere svariati, 3 che me ne vengono in mente:

    1) Si sfruttano i layout manager, in pratica si fa in modo che in una area ci sia un pannellino che disegna solo questo righello e a fianco un altro pannello che contiene il resto.
    Una idea banale potrebbe essere BorderLayout: in WEST il righello e in CENTER il pannello che contiene il resto. Ma non è l'unica possibilità ovviamente.

    2) Si realizza un Border (implementazione di javax.swing.border.Border e in genere si parte dalla estensione di javax.swing.border.AbstractBorder per comodità).
    Tutti i componenti Swing possono visualizzare 1 Border. Un bordo può disegnare quello che vuole su uno o più lati del componente e al tempo stesso fornisce al componente gli "insets" affinché si possa scartare questo spazio. I layout manager ad esempio lo scartano, cioè dispongono i componenti in modo che non vadano certo sopra il bordo.

    Quindi il tuo "RighelloBorder" lo assegni nello stesso pannello dove andrai a mettere il resto dei componenti. Se come hai detto all'inizio non c'è layout manager devi preoccuparti tu di non andare a piazzare componenti sopra il bordo! (mi pare il minimo, no?)

    3) Fai un pannello specifico che disegna nel suo paintComponent il righello e questo pannello fa anche, allo stesso tempo, da "contenitore" per il resto dei componenti. Anche qui più o meno come 2) devi assicurarti che non si vada sopra il disegno del righello.


    Per quello che hai detto "disegnare una linea che unisce oggetti grafici che si trovano in pannelli diversi dello stesso frame", questo è più complicato ma è comunque fattibile e ci sarebbero da fare un po' di valutazioni.
    Ciao andbin, grazie mille... Mi stai dando una grossa mano a comprendere certi meccanismi. Ora ti volevo chiedere alcune cose dopo che ho fatto alcune prove. In particolare ho provato sia la soluzione con doppio pannello che quella con il tutto in unico pannello.

    Per quanto riguarda la soluzione con doppio pannello,uno contenente il righello e uno contenente il resto, pare funzionare, però mi genera un paio di problemi per il prosieguo:
    1) come faccio poi ad andare a collegare (oggetti/componenti) contenuti in pannelli diversi?
    2) come posso disegnare qualcosa che comprenda entrambi i pannelli, ad esempio una linea orizzontale che parta dalla metà del pannello a sinitra e finisca alla fine del pannello a destra?

    La soluzione ad unico pannello invece mi crea problemi di visualizzazione del tutto, in particolare i pannelli che vado a far muovere "lasciano la scia" cioè quando scorrono è come se colorassero il background del pannello nella zona in cui sono passati (questo accade solo quando c'è la paintComponent, se la tolgo e faccio soltanto scorrere pannelli va tutto bene, ovviamente però non disegno il righello), e poi il tutto comincia a diventare poco reattivo all'aggiunta di nuovi pannelli che scorrono perché ovviamente ogni volta che scatta il timer del pannello che contiene il tutto per ridisegnare i signoli pannelli si va a fare la repaint e quindi viene fatta un sacco di volte la paintComponent inutilmente. Non c'è un modo per fare la paintComponent soltanto alla creazione del pannello?

    Mamma mia sto impazzendo

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.