View Single Post
Old 22-09-2006, 14:47   #18
TellaspallaBob
Member
 
L'Avatar di TellaspallaBob
 
Iscritto dal: Nov 2002
Messaggi: 262
Quote:
Originariamente inviato da fefott
Mentre nella classe JFrame ho:

private void init()
{

...........
........

panel = new LabyrinthPanel(setting, game);

.......
........

// Dentro ogni frame c'è un container recuperabile con metodo getContentPane().
Container c = getContentPane();

setBackground(BACKGROUND_COLOR);

// I nuovi componenti vanno aggiunti al container.
c.add (panel);
}
Nel tuo codice non specifici al ContentPane il tipo di Layout usare, quindi lui userà il suo di default cioè il FlowLayout.

soluzione 1 Senza Layoutmanager

class MasterFrame extends JFrame
{
// Riferimento globale al pannello di gioco
PanelGame pnlGame = null;

public MasterFrame()
{
super();

// Disabilito il LayoutManager, ma a questo punto se
// Sei tu che devi gestire uno ad uno tutti i componenti ad esso
// aggiunti.
getContentPane().setLayout(null);

// Creo l'istanza del pannello di gioco
pnlGame = new PanelGame(....parametri....);

// Aggiungo il pannello di gioco al frame.
getContentPane().add(pnlGame);
}


// setto la nuova dimensione del pannello
private void setDimensionePannelloDiGioco(int w, int h)
{
pnlGame.setSize(w,h);

// Ricorda che la variazione di dimensione di un oggetto
// non implica necessariamente il suo ridisegno.
// Se vuoi essere certa fai un bel repaint()
}
}

class PanelGame extends JPanel
{
protected void paintComponent(Graphics g)
{
super.paintComponent(g);

// Visto che le dimensioni sono fisse del pannello
// allora le ricavo con la maniera base
Dimension dimPanel = getSize();
}
}

soluzione 2 CON LayoutManager

class MasterFrame extends JFrame
{
// Riferimento globale al pannello di gioco
PanelGame pnlGame = null;

public MasterFrame()
{
super();

// Disabilito il LayoutManager, ma a questo punto se
// Sei tu che devi gestire uno ad uno tutti i componenti ad esso
// aggiunti.
getContentPane().setLayout(new BorderLayout());

// Creo l'istanza del pannello di gioco
pnlGame = new PanelGame(....parametri....);

// Aggiungo il pannello di gioco al frame.
getContentPane().add(pnlGame);
}

// Questo metodo nel caso di LayoutManage non serve
// perchè la dimensione del pannello è auto-gestita dal LayoutManage
// al variare del Frame Principale
// In essa però puoi vedere come si settano le preferred size
private void setDimensionePannelloDiGioco(int w, int h)
{
// setto le dimensioni preferite al fine di far si che
// il LayoutManager ne tenga conto
pnlGame.setPreferredSize(new Dimension(w,h));
}
}

class PanelGame extends JPanel
{
protected void paintComponent(Graphics g)
{
super.paintComponent(g);

// Visto che le dimensioni sono autogestite dal LayoutManager
// posso ricavarmele mediante le dimensione di preferenza
Dimension dimPanel = getPreferredSize();
}
}

Se la mia ipotesi è giusta, cioè il problema è che stai utilizzando i layoutManager, allora ti consiglio di dare uno sguardo ai tutorial sun per capirli meglio.

Ciao e spero di esseri stato d'aiuto.
TellaspallaBob è offline   Rispondi citando il messaggio o parte di esso