Domanda

Ho una sottoclasse JPanel su cui aggiungo buutons, etichette, tabelle, ecc Per visualizzare sullo schermo che io uso JFrame:

MainPanel mainPanel = new MainPanel(); //JPanel subclass

JFrame mainFrame = new JFrame();
mainFrame.setTitle("main window title");
mainFrame.getContentPane().add(mainPanel);
mainFrame.setLocation(100, 100);
mainFrame.pack();
mainFrame.setVisible(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Ma quando ho dimensionare la finestra, le dimensioni del pannello non cambiano. Come rendere le dimensioni del pannello per essere la stessa come la dimensione della finestra, anche se è stato ridimensionato?

È stato utile?

Soluzione

È possibile impostare un gestore di layout come BorderLayout e quindi definire più precisamente, dove il vostro pannello dovrebbe andare:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new BorderLayout());
mainFrame.add(mainPanel, BorderLayout.CENTER);
mainFrame.pack();
mainFrame.setVisible(true);

Questo mette il pannello nella zona centro del telaio e lo lascia crescere automaticamente quando il ridimensionamento della struttura.

Altri suggerimenti

È necessario impostare un gestore di layout per la JFrame da usare - Questo si occupa di come i componenti sono posizionati. Un uno utile è il manager BorderLayout.

È sufficiente aggiungere la seguente riga di codice dovrebbe risolvere i vostri problemi:

mainFrame.setLayout(new BorderLayout());

(Fate questo prima di aggiungere componenti al JFrame)

Se l'opzione BorderLayout fornito dai nostri amici doesnot lavoro, prova ad aggiungere ComponentListerner al JFrame e implementare il metodo componentResized (evento). Quando l'oggetto JFrame verrà ridimensionata, questo metodo verrà chiamato. Quindi, se si scrive il codice per impostare la dimensione del JPanel in questo metodo, si otterrà il risultato desiderato.

Ya, so che questo 'soluzione' non è buona, ma lo usano come una rete di sicurezza. ;)

Dalla mia esperienza, ho usato GridLayout.

    thePanel.setLayout(new GridLayout(a,b,c,d));

a = numero di riga, b = numero di colonna, c = distanza orizzontale, d = distanza verticale.


Per esempio, se voglio creare pannello con:

  • riga illimitata (set a = 0)
  • 1 colonna (set b = 1)
  • dislivello = 3 (set d = 3)

Il codice è qui sotto:

    thePanel.setLayout(new GridLayout(0,1,0,3));

Questo metodo è utile quando si desidera aggiungere JScrollPane ai tuoi JPanel. Dimensioni delle JPanel all'interno JScrollPane volontà cambia automaticamente quando si aggiungono alcuni componenti su di esso, in modo che il JScrollPane si ripristinerà automaticamente la barra di scorrimento.

Come altri utenti hanno detto, è necessario modificare il LayoutManager in uso. Ho sempre preferito utilizzare un GridLayout modo che il codice sarebbe diventato:

MainPanel mainPanel = new MainPanel();
JFrame mainFrame = new JFrame();
mainFrame.setLayout(new GridLayout());
mainFrame.pack();
mainFrame.setVisible(true);

GridLayout sembra più concettualmente corretto per me quando si desidera che il pannello per occupare l'intero schermo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top