Newsgroup: it.comp.java
Titolo: JPanel di forma qualunque

Salve
riposto...
Vorrei sapere come e' possibile creare JPanel di forma non
rettangolare (ad esempio romboidali) e come e' possibile
ruotare un panel che estende JPanel rispetto al suo angolo
superiore sinistro (ottenendo la rotazione implicita
ed automatica di tutto il contenuto del panel).
Grazie e a presto
Lorenzo


wrote:

i JPanel sono rettangolari. al massimo puoi fare in modo che essi si
disegnino in modo da sembrare non rettangolari lasciando aree
trasparenti. ad ogni modo essi riceveranno gli eventi che "ricadono"
all'interno del loro bound rettangolare... sara' poi compito tuo
decidere se ignorare o no tali eventi perche' sono al di fuori della
zona "visibile".
per quanto riguarda le rotazioni: cosa c'e' nel JPanel?
- dei componenti... scordati di farli ruotare come ti pare. vorrai mica
riscriverti il codice di ridisegno dei componenti?
- delle Shape o derivati. Applichi AffineTransform
- un'immagine che viene disegnata dal JPanel stesso nel suo metodo
paintComponent. scriviti il metodo in modo che disegni l'immagine
ruotata.
- varie ed eventuali.
saluti
-- 
Seti@Home Java Applets
http://maruko.cjb.net/

ascoltando il vento dell'est udii Marco Parmeggiani che diceva queste parole
| i JPanel sono rettangolari. al massimo puoi fare in modo che ....
--- mega cut ---
Tecnicamente credi che sia possibile ottenere un effetto del genere
implementando un nuovo componente?
(Partendo da JPanel o da JComponent per esempio)
Icaro
--
"Se riesci a mantenere la calma quando tutti intorno te hanno perso la
testa, forse non hai afferrato bene la situazione."


io l'ho fatto ereditando da jbutton per ottenere dei pulsanti non
quadrati. se non ti servono le funzionalita' del bottone puoi usare
jcomponent. con jpanel non so che problemi possano esserci perche' non
l'ho mai usato per questi scopi.
ciao


ascoltando il vento dell'est udii Marco Parmeggiani che diceva queste parole
| On Wed, 31 Jul 2002 14:46:51 +0200, "Icaro"

grazie, per ora non provero' visto che non ne ho bisogno, ma e' bello sapere
di poterlo fare ;-P

Ciao
trovo la tua idea interessante, potresti entrare + in dettaglio?
Grazie
Lorenzo

trovo la tua idea interessante, potresti entrare + in dettaglio?
se non quoti si fatica a capire con chi stai parlando.
ho scritto un esempio che non ho provato ma che piu' o meno dovrebbe
andare e non pretende di essere formalmente corretto. si trova anche
qualcosa sul sito della sun.
il metodo contains dice se un punto x,y e' contenuto nel bottone -> lo
riscrivo in modo che rifletta la forma del bottone.  cosi' dovrebbe
reagire agli eventi solo sulla parte "visibile". ovviamente, se vuoi
avere feedback visuale come per i normali bottoni (premuto, ecc.) allora
devi implementare tu il codice necessario, ascoltare gli eventi, ad
esempio del mouse, e reagire di conseguenza. (ad esempio, reagire a
mouseEntered e mouseExited per fare un effetto roll over).
poi lo usi come un normale bottone, addActionListener e menate varie...
ciao
public class BTrasp extends JButton
{
GeneralPath forma;
public BTrasp (GeneralPath f)
{
        super();
	forma = f;
	Rectangle r = forma.getBounds();
        setBounds(r);
	//altrimenti disegna un rettangolo di sfondo
	//grande come il bound
        setOpaque(false);
        setFocusPainted(false);
        setDoubleBuffered(true);
}
public void paintComponent(Graphics g)
{
	Graphics2D g2 = (Graphics2D)g;
	g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
	g2.setPaint(Color.yellow);
	g2.fill(forma);
	g2.setPaint(Color.blue);
	g2.draw(forma);
}
public Dimension getPreferredSize()
{
    return new Dimension(forma.getBounds().width,
forma.getBounds().height);
}
public Dimension getMinimumSize()
{
    return new Dimension(forma.getBounds().width,
forma.getBounds().height);
}
public boolean contains(int x, int y)
{
    return forma.contains(x, y);
