PDA

View Full Version : [JAVA]Piccolo Menù


elenuccia08
29-01-2011, 15:43
Ciao a tutti ^_^ appena iscritta
Sto creando un piccolo jframe per settare i caratteri di un editor di testo da implementare per un'esame. Simile a quello di notepad, ma più semplice. Con 3 jlist per scegliere dimensione, stile e font, 3 etichette, una label che mostri come viene modificato il carattere e i tasti OK e Annulla. Sono un po scarsa con la grafica, infatti quando cambio la dimensione del carattere della label i pannelli si sovrappongono, e in più non riesco a modificare la dimensione delle jlist. Questo è il codice che ho scritto, probabilmente sarà pieno di errori. Dove sbaglio? :muro: Grazie a tutti

listaDimensioni = new JList();
listaFont = new JList();
listaEffetti = new JList();

scroll1 = new JScrollPane(listaFont);
scroll2 = new JScrollPane(listaDimensioni);
scroll3 = new JScrollPane(listaEffetti);

pannelloScroll = new JPanel(new GridLayout(1, 3, 30, 20));
pannelloScrollEsterno = new JPanel();

scroll1.setPreferredSize(new Dimension(90, 100));
scroll2.setPreferredSize(new Dimension(30, 100));
scroll3.setPreferredSize(new Dimension(90, 100));

listaFont.setListData(font);
listaDimensioni.setListData(dimensioni);
listaEffetti.setListData(effetti);

pannelloScroll.add(scroll1);
pannelloScroll.add(scroll2);
pannelloScroll.add(scroll3);
pannelloScrollEsterno.add(pannelloScroll);

pannelloEtichette = new JPanel(new GridLayout(1, 3, 20, 100));

tipoCarattere = new JLabel(" Tipo di carattere");
stile = new JLabel(" Punti");
punti = new JLabel(" Stile ");

pannelloEtichette.add(tipoCarattere);
pannelloEtichette.add(stile);
pannelloEtichette.add(punti);
pannelloEtichette.setSize(10, 10);

pannelloEsempio = new JPanel(new GridLayout(2, 3, 10, 50));
pannelloEsempio2 = new JPanel();
pannelloEsempio3 = new JPanel();
pannelloEsempio4 = new JPanel();
//pannelloEsempio2, 3 e 4 sono pannelli vuoti creati come riempimento per
//far stare i pulsanti e l'etichetta in determinati punti
esempio = new JLabel("Esempio");

ok = new JButton("Ok");
annulla = new JButton("Annulla");

pannelloEsempio.add(pannelloEsempio2);
pannelloEsempio.add(esempio);
pannelloEsempio.add(pannelloEsempio3);
pannelloEsempio.add(pannelloEsempio4);
pannelloEsempio.add(ok);
pannelloEsempio.add(annulla);

menuCarattere = new JFrame("Menù Carattere");

content.setSize(100, 100);
content.add(pannelloScrollEsterno, BorderLayout.NORTH);
content.add(pannelloEtichette, BorderLayout.CENTER);
content.add(pannelloEsempio, BorderLayout.SOUTH);

menuCarattere.getContentPane().add(content);

PGI-Bis
29-01-2011, 17:03
Il codice è ok. La sovrapposizione deriva dal layout manager del contenitore "pannelloScrollEsterno":

pannelloScrollEsterno = new JPanel();

Se usi un GridLayout:

pannelloScrollEsterno = new JPanel(new GridLayout(1, 1));

ottieni una certa stabilità. In verità non c'è sovrapposizione, semplicemente il flow layout non ridimensiona i figli quando lo spazio scarseggia quindi il contenuto appare tagliato.

Sempre usando il GridLayout per pannelloScrollEsterno, ottieni anche il ridimensionamento delle liste con l'espansione del contenitore. Col FlowLayout i componenti si attestano sulla dimensione preferita e lì restano, col grid si adattano.

Probabilmente le etichette le vuoi in testa, quindi dirai:

content.add(pannelloScrollEsterno, BorderLayout.CENTER);
content.add(pannelloEtichette, BorderLayout.NORTH);
content.add(pannelloEsempio, BorderLayout.SOUTH);

La gestione di pannelloEsempio ha una sua originalità e può anche andare. Ottieni lo stesso effetto senza usare dei "segnaposto" se usi un BorderLayout con al centro l'etichetta e in fondo un secondo JPanel con un FlowLayout (TRAILING) e i due pulsanti.

Assegna all'etichetta esempio una dimensione preferita, anche minima, in modo tale che non causi il ridimensionamento della gui quando gli rifili un font molto grande.