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.