PDA

View Full Version : [JAVA] Problemi di layout


Cory
25-05-2009, 16:49
Ciao a tutti :) Sto scrivendo dei semplici programmini in Java che abbiano un'interfaccia grafica..una cosa molto limitata, tipo 2-3 bottoni, un campo di testo e cose cosė. Tuttavia non riesco a spostare i componenti all'interno del frame, nč utilizzando il posizionamento assoluto, nč usando quello relativo (NORTH, SOUTH, WEST, EAST). Vi copio di seguito il codice, riuscite a dirmi cosa non va?? Grazie mille!

package altro;
import java.awt.*;
import javax.swing.*;

public class Altro {


public static void main(String [] args){

JFrame frame=new JFrame("Programma");

frame.setSize(400,400);
frame.setVisible(true);
frame.setContentPane(new ContentPane());

}



}

class ContentPane extends JPanel{

private JPanel pannello;
JButton bott1;
JButton bott2;



private void init(){

bott1=new JButton("Prova");
bott2=new JButton("Ri-prova");
add(bott1, BorderLayout.WEST);
add(bott2, BorderLayout.CENTER);
}

public ContentPane(){

try{init();} catch (Exception e){e.printStackTrace();}


}

}


ho evitato di mettere ActionListener e tutto per evitare di appesantire il codice

Cory
26-05-2009, 08:55
UP!!

banryu79
27-05-2009, 11:55
Due risorse utili che ti saranno di grande aiuto:
- Trail: Graphical User Interfaces (http://java.sun.com/docs/books/tutorial/ui/index.html)
- Trail: Creating a GUI with JFC/Swing (http://java.sun.com/docs/books/tutorial/uiswing/index.html)

Con un investimento di 3-4 ore puoi partire in modo semplice con il piede giusto ;)

PGI-Bis
27-05-2009, 13:58
Il codice č corretto, nel senso che fa quel che c'č scritto.

ContentPane č un JPanel. Un JPanel ha come LayoutManager predefinito un FlowLayout. FlowLayout distribuisce i componenti su righe orizzontali. In pratica li affianca uno all'altro in ordine di inserimento e quando non c'č pių spazio sulla riga "va a capo".

Quando in "init" scrivi:

add(bott1, BorderLayout.WEST);
add(bott2, BorderLayout.CENTER);

inserisci i componenti bott1 e bott2 in ContentPane e quando ContentPane diventerā visibile quei due pulsanti riceveranno la posizione e la dimensione stabilite da FlowLayout. Le due costanti WEST e CENTER sono semplicemente ignorate: quelle avrebbero effetto se il LayoutManager fosse BorderLayout. es. se scriviamo:

private void init() {
setLayout(new BorderLayout());
bott1 = new JButton("Prova");
bott2 = new JButton("Ri-prova");
add(bott1, BorderLayout.WEST);
add(bott2, BorderLayout.CENTER);
}

i pulsanti assumeranno una diversa posizione e dimensione.

Nel main metti "frame.setContentPane(new ContentPane())" prima di setVisible(true) altrimenti incappi in problemi di convalida del Layout. Se lo metti dopo il setVisible allora devi far seguire la mutazione del pannello del contenuto da un frame.validate(), frame.repaint(). Il contenuto del metodo main dovrebbe poi essere affidato all'EDT ma č un'altra storia.