PDA

Visualizza la versione completa : [JAVA] Dimensioni JFrame


Aki
19-10-2005, 15:05
Ave populus,
ho una domanda riguardante Java:
come componentio grafici uso Swing, ed ho un problema nel settare le dimensioni della finestra; ovvero, io scrivo così:


private static void createAndShowGUI(String d)
{
JFrame.setDefaultLookAndFeelDecorated(true);

JFrame frame = new JFrame("Agenda");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(800, 600);

JLabel label = new JLabel(d);
frame.getContentPane().add(label);

frame.pack();
frame.setVisible(true);
}

però non mi setta a 800x600 la finestra, io credo dipenda dal layout manager utilizzato, ma essendo agli inizi con java non sò quale (e se) layout serva
potete aiutarmi???

LeleFT
19-10-2005, 15:08
Non dipende dal LayoutManager ma dal metodo pack() che hai usato. Rimuovi l'istruzione frame.pack(); :)


Ciao. :ciauz:

Aki
19-10-2005, 15:15
Originariamente inviato da LeleFT
Non dipende dal LayoutManager ma dal metodo pack() che hai usato. Rimuovi l'istruzione frame.pack(); :)


Ciao. :ciauz:

Grande, funfiona;
ma per capire, perchè ho dovuto rimuovere frame.pack();?

inoltre, visto che massimizza per tutta l'area del frame la label, qual'è quel layout manager che mi permette di posizionare i componenti dove voglio e con la dimensione che voglio io?

Spero di essermi fatto capire

Aki
19-10-2005, 15:53
ovvero, ho scritto così:


private static void createAndShowGUI(String d)
{
JFrame.setDefaultLookAndFeelDecorated(true);

JFrame frame = new JFrame("Agenda");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(800, 600);

JLabel label = new JLabel(d);
label.setSize(80,20)
frame.getContentPane().add(label);

frame.setVisible(true);
}

ma non mi ridimensiona la label

LeleFT
19-10-2005, 16:00
Una cosa alla volta:

1) Perchè hai dovuto togliere il metodo pack()? Perchè quel metodo imposta automaticamente la dimensione della finestra, adattandola ad occupare il minor spazio possibile in base ai componenti che vi sono inseriti. In pratica contraddice quello che volevi fare tu :)

2) Come fai a fare in modo che la JLabel non si ingrandisca a occupare tutto lo spazio del JFrame? Devi semplicemente cambiare LayoutManager. Di default è impostato un BorderLayout e sempre di default il primo componente va a finire nel BorderLayout.CENTER. Se non ci sono altri componenti, l'unico presente prende tutto lo spazio.

3) Come fai a posizionare i tuoi componenti dove vuoi con la dimensione che vuoi? Basta rimuovere il LayoutManager. Nessuno ti obbliga ad usarlo. Per fare questo devi utilizzare i seguenti metodi:


private static void createAndShowGUI(String d)
{
JFrame.setDefaultLookAndFeelDecorated(true);

JFrame frame = new JFrame("Agenda");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setSize(800, 600);

// Qui tolgo il LayoutManager
frame.getContentPane().setLayout( null );

JLabel label = new JLabel(d);
label.setSize(80,20)

// Qui imposto la posizione e la dimensione della JLabel:
// Posizione (x: 20, y: 10)
// Dimensione (orizzontale: 80, verticale: 25)
label.setBounds(20, 10, 80, 25);
frame.getContentPane().add(label);

frame.setVisible(true);
}

Ciao. :ciauz:

Aki
19-10-2005, 16:04
@LeleFT: ok grassie

Loading