Newsgroup: it.comp.java
Titolo: Swing e Layout

Salve,
sto realizzando una interfaccia in un applet con le Swing,
quello che mi serve è un semplice layout che mi permetta
di avere 3 righe una sopra l'altra di dimensioni diverse,
ognuna è un Jpanel in cui inserire altre stupidaggini.
Ho cercato di tutto, ho fatto prove ma il risultato è penoso,
il problema è che la prima riga delle tre, in alto, contiene una
fila di JTextBox che diventano enormi e prendono tutto lo
spazio grafico della fila!
Vorrei avere la prima riga in alto sottile, per intenderci e
quelle sotto più grosse.
HELP!! Sembrerà una cavolata ma non ci capisco più niente.
Stò affogando nelle API della Swing e negli inutili esempi
di tutti i tipi di Layout!!.
Accetto ogni buon consiglio! Grazie.
Christian.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG



>sto realizzando una interfaccia in un applet con le Swing...
Posta un pezzo di codice cosi' lo vediamo insieme.
Ciao,
    Bruno.
---
| Bruno Bossola
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola

Ecco l'applet, sono solo 85 righe, pui farlo girare tutto.
Grazie in anticipo per ogni consiglio.
/*
 * Veicoli.java 02/06/27
 */
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import javax.swing.*;
class Car extends JFrame
{
 JPanel P1 = new JPanel(new GridLayout(3, 8));
 JLabel l1,l2,l3,l4,l5,l6,l7,l8;
 Font etic = new Font("Helvetica", Font.BOLD, 11);
    JTextField classe = new JTextField("00",3);
    JTextField velmax = new JTextField("00",3);
    JTextField velman = new JTextField("00",3);
    JTextField accell = new JTextField("00",3);
    JTextField decell = new JTextField("00",3);
    JTextField carmax = new JTextField("00",3);
    JTextField caratt = new JTextField("00",3);
    JTextField weight = new JTextField("00",3);
 public Car()
 {
  settaPannello();
  this.getContentPane().add(P1);
  this.setSize(750, 550);
  Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
  Dimension frameSize = this.getSize();
  if (frameSize.height > screenSize.height)  frameSize.height =
screenSize.height;
     if (frameSize.width > screenSize.width)    frameSize.width =
screenSize.width;
  this.setLocation(((screenSize.width - frameSize.width) / 2),
(screenSize.height - frameSize.height) / 2);
  setResizable(false);
  show();
 }
 private void settaPannello()
 {
  P1.add(l1 = new JLabel("Classe "));
     P1.add(l2 = new JLabel("Vel. Max."));
     P1.add(l3 = new JLabel("Vel. di Manovra "));
     P1.add(l4 = new JLabel("Accel."));
        P1.add(l5 = new JLabel("Decell."));
     P1.add(l6 = new JLabel("Carico Massimo "));
     P1.add(l7 = new JLabel("Carico attuale "));
     P1.add(l8 = new JLabel("Peso del veicolo "));
     l1.setFont(etic);l2.setFont(etic);l3.setFont(etic);l4.setFont(etic);
     l5.setFont(etic);l6.setFont(etic);l7.setFont(etic);l8.setFont(etic);
     P1.add(classe);
     P1.add(velmax);
     P1.add(velman);
     P1.add(accell);
     P1.add(decell);
     P1.add(carmax);
     P1.add(caratt);
     P1.add(weight);
     P1.add(new JLabel("vuoto"));
     P1.add(new JLabel("vuoto"));
     P1.add(new JLabel("vuoto"));
     P1.add(new JLabel("vuoto"));
     P1.add(new JLabel("vuoto"));
     P1.add(new JLabel("vuoto"));
     P1.add(new JLabel("vuoto"));
     P1.add(new JLabel("vuoto"));
 }
}
public class Veicoli extends JApplet
{
  Car schermata;
  public void init()
  {
 schermata = new Car();
 schermata.show();
  }
}
//------- FINE APPLET ----------
"Bruno Bossola"  ha scritto nel messaggio


Uhm... mi sembra un lavoro da GridBagLayout, io userei quello. Dai un'occhiata al
tutorial:
http://java.sun.com/docs/books/tutorial/uiswing/layout/gridbag.html
In alternativa ci sono due modi alternativi che mi vengono in mente (ma nessuno dei due mi
piace, anzi!):
1) usare 8 boxlayout verticali affiancati (ognuno rappresenta una colonna) in un pannello:
    JPanel col1 = new JPanel();
    col1.setLayout(new BoxLayout(col1, BoxLayout.Y_AXIS));
    col1.add(l1 = new JLabel("Classe "));
    col1.add(classe);
    col1.add(new JLabel("vuoto"));
 
    JPanel col2 = new JPanel();
    col2.setLayout(new BoxLayout(col2, BoxLayout.Y_AXIS));
    col2.add(l2 = new JLabel("Vel. Max."));
    col2.add(velmax);
    col2.add(new JLabel("vuoto"));
 
    JPanel col3 = new JPanel();
    col3.setLayout(new BoxLayout(col3, BoxLayout.Y_AXIS));
    col3.add(l3 = new JLabel("Vel. di Manovra "));
    col3.add(velman);
    col3.add(new JLabel("vuoto"));
    ...
    ...
 
    P1 = new JPanel();
    P1.add(col1);
    P1.add(col2);
    P1.add(col3);
    ...
2) com'e' fatto attualmente, prima di infilare il tuo componente nel pannello P1 inserirlo
in un pannello (che di defatul ha un un flowlayout e non ridimensiona il componente).
Nessuna delle due soluzioni mi piace, comunque io userei di sicuro il GridBagLayout: un
po' ostico, all'inizio, ma poi da' soddisfazioni :-) All'inizio comunque prova la 1, e' la
meno sgualfa, vedi come viene, se ti soddisfa vai cosi. La 2 e' veramente becera :-)


Grazie mille, penso che imparerň il GridBag, dovrň impratichirmi perché
č veramente tosto, il tutorial della sun non č il massimo, purtroppo...
ciao!
Christian
<bbossola @ 
hotmail.com
 (Bruno Bossola)> ha scritto nel messaggio
news:3d1b4bea...@news.inet.it...


 è veramente tosto, il tutorial della sun non è il massimo, purtroppo...
