Newsgroup: it.comp.java
Titolo: Utilizzo del metodo getInsets

Salve a tutti,
potete spiegarmi cosa sbaglio nell'uso del metodo getInsets?
col seguente codice tutte le variabili dell'oggetto restituitomi sono
a 0!! eppure la finestra i bordi ce li ha eccome!
public class Prova extends JFrame
{
	int bUp,bDown,bLeft,bRight; //distanze tra bordo finestra e
area disegnabile
	public void calcBorder()
	{
		Insets area=this.getInsets();
		bUp=area.top;
		bDown=area.bottom;
		bLeft=area.left;
		bRight=area.right;	
	}
	Prova()
	{
		super("prova");
		calcBorder();
		setSize(150+bLeft+bRight,150+bUp+bDown);
		setBackground(new Color(255,255,255));
	}
static void main(String[] args)
	{
	Prova app=new Prova();
	app.show();
 
	app.addWindowListener
		(
			new WindowAdapter()
			{
				public void windowClosing(WindowEvent
e)
				{
					System.exit(0);
				}
			}
		);
 
	}
}		
Ci sono cose che non si possono interrompere. La consapevolezza che i sogni della gente sopravviveranno al passaggio da un'epoca all'altra è qualcosa che durerà per sempre finchè la gente avrà sete di libertà.
-Il re dei pirati Gold Roger-

 setSize(150+bLeft+bRight,150+bUp+bDown);
Quando calcoli il border il JFrame non č ancora "realized". Prova a
invertire setSize e calcBorder, dovrebbe andare.
Simon

Gli oggetti SWING hanno in realtà due Insets.
Il primo è quello che hai cercato di utilizzare tu e che generalmente è a
zero (raramente si utilizza).
Il secondo è quello del Border.
Per calcolare l'area interna effettiva, devi chiedere al Border il suo
Insets : getBorderInsets(Component c)
L'Insets dell'oggetto (quello che hai richiamato tu) serve per rendere
l'oggetto leggermente + piccolo rispetto al suo bounds. Ad esempio se metti
una JList in una JScrollPane e vuoi che la JList abbia una leggera cornice
(vuota ovviamente o colorata se applichi alla JScrollPane un'immagine di
sfondo), setti l'Insets della JList.
Se non erro non esiste il metodo setInsets(). Quindi per utilizzare l'Insets
di un oggetto devi ridefinire l'oggetto e sovrascrivere il metodo getInsets,
facendo tornare l'Insets da te desiderato.
es
public class MyInsetsJList extends JList
{
    private Insets ins = new Insets(5,5,5,5);
    public Insets getInsets()
    {
        return ins;
    }
}
Puoi ottenere lo stesso effetto utilizzando l'apposito Border (EmptyBorder).
Oppure sfruttare Border più complessi (CompoundBorder(Border outsideBorder,
Border insideBorder)) per avere un Border formato da più tipi di border
(es.quello Empty + un'altro (es il Bevel) ).
Ciao.

Insets : getBorderInsets(Component c)
scusa non credo di avere capito tantissimo...
la classe Jframe non contiene un metodo getBorderInsets(), e non cpisco cosa intendi con "chiedere
al Border il suo insets"? in base al mio codice, che componente dovrei passare a getBorderInsets()?
scusa ancora per il disturbo,
        Carlo
-----------------------------------------------------
Ci sono cose che non si possono interrompere. La consapevolezza che i sogni della gente sopravviveranno al passaggio da un'epoca all'altra è qualcosa che durerà per sempre finchè la gente avrà sete di libertà.
-Il re dei pirati Gold Roger-
-----------------------------------------------------
togli NOSPAM per rispondere via e-mail

getBorderInsets() non è un metodo del JFrame ma dell'interfaccia Border.
Se usi ad esempio :
    es:    BevelBorder border = new BevelBorder();
            swingComponent.setBorder(border);
            Insets ins = border.getBorderInsets();
    oppure :
            swingComponent.setBorder(new BevelBorder());
            Insets ins = swingComponent.getBorder().getBorderInsets();
ricavi lo spessore del bordo del tuo componente swing.