Newsgroup: it.comp.java
Titolo: Un aiuto per la prima app.

Salve.
Sto iniziando a cimentarmi con java.
Lavoro in ambiente linux.
Sto cercando di sviluppare un'interfaccia grafica da utilizzare
per immettere dati che poi verranno memorizzati in un 
database postgres.
A tal proposito sto seguendo i vari esempi che trovo 
nelle varie riviste che parlano di java. 
Se posso, di seguito vi riporto il codice per una 
elementare interfaccia.
Vorrei che mi deste un consiglio, se sto procedendo bene o se gia' 
c'e qualcosa che non va.
Il tutto funziona eccetto per il fatto che al click del
pulsante che chiamo btn_cercaxNominativo sembra che non riporti a true
la proprieta' visible delle componenti label e text indicate.
Perche'?
Grazie.
Ecco il codice, scusate se e' un po' lunghetto:
import java.awt.*;
import java.awt.event.*;
public class OmesseTimbratureGui extends Frame implements ActionListener{
private TextField txt_codice, txt_cognome, txt_nome, testo;
private Button btn_cercaxNominativo, insert, exit, add;
private Label lbl_codice, lbl_cognome, lbl_nome;
private List uno, due;
public OmesseTimbratureGui(){
  super("Omesse Timbrature");
  setBackground(Color.lightGray);
  setFont(new Font("TimesRoman", Font.BOLD, 14));
  setSize(700, 200);
  // costruzione GUI
    add("North", panelNord());
    add("Center", panelCentro());
    add("South", panelSud());
    ChiusuraFinestra cf = new ChiusuraFinestra();
    //Aggancio l'ascoltatore alla Finestra
    addWindowListener(cf);
    setVisible(true);
}
private Panel panelNord(){
  Panel p = new Panel(new BorderLayout());
  p.setLayout(new GridLayout(2,3));
  Panel pnl_codice = new Panel(new FlowLayout(FlowLayout.LEFT));
  lbl_codice= new Label("codice");
  pnl_codice.add(lbl_codice);
  txt_codice = new TextField(6);
  pnl_codice.add(txt_codice);
  lbl_cognome = new Label("cognome");
  pnl_codice.add(lbl_cognome);
  txt_cognome = new TextField(25);
  pnl_codice.add(txt_cognome);
  lbl_nome = new Label("nome");
  pnl_codice.add(lbl_nome);
  txt_nome = new TextField(25);
  pnl_codice.add(txt_nome);
  p.add(pnl_codice);
  lbl_cognome.setVisible(false);
  txt_cognome.setVisible(false);
  lbl_nome.setVisible(false);
  txt_nome.setVisible(false);
  return p;
}
private Panel panelCentro(){
  Panel p = new Panel();
  p.setLayout(new GridLayout(1, 3));
  Panel pnl_cercaxNominativo = new Panel(new FlowLayout(FlowLayout.LEFT));
  btn_cercaxNominativo = new Button("cerca x nominativo");
  btn_cercaxNominativo.setActionCommand("vedoNominativo");
  btn_cercaxNominativo.addActionListener(this);
  pnl_cercaxNominativo.add(btn_cercaxNominativo);
  p.add(pnl_cercaxNominativo);
  return p;
}
private Panel panelSud(){
  Panel p = new Panel();
  exit = new Button("Esci");
  //associo un actioncommand al bottone
  exit.setActionCommand("esci");
 //aggiancio l'ascoltatore per gli eventi generati dal bottone
  exit.addActionListener(this);
  p.add(exit);
  return p;
}
public void actionPerformed(ActionEvent e){
  String sorgente = e.getActionCommand();
  if (sorgente.equals("vedoNominativo")){
    lbl_cognome.setVisible(true);
    lbl_nome.setVisible(true);
    txt_cognome.setVisible(true);
    txt_nome.setVisible(true);
  }                 
  else
     if (sorgente.equals("esci"))
      System.exit(0);
     }
public static void main(String a[]){
  new OmesseTimbratureGui();
}
}
class ChiusuraFinestra extends WindowAdapter{
  public void windowClosing(WindowEvent e){
  System.exit(0);
}
}                                                                   

Perche'?
Devi invocare il metodo "validate" al momento giusto, cioe' dopo le
variazioni effettuate ai componenti che hai inserito nel pannello:
  if (sorgente.equals("vedoNominativo")){
    lbl_cognome.setVisible(true);
    lbl_nome.setVisible(true);
    txt_cognome.setVisible(true);
    txt_nome.setVisible(true);
    validate();  // <----- aggiungi questo, ho provato e funziona!
  }                 
Se non ho capito male, cio' forza un aggiornamento del contenitore dei
componenti. NB: sono un principiante anch'io, quindi vorrei sapere dai
guru se questo e' il modo standard-corretto di procedere.
Un'altra cosa: ho notato che hai definito le parti della gui, ovvero i
pannelli che aggiungi al tuo frame, come metodi della classe
principale:
 private Panel panelNord(){
  ...
Io invece cerco di realizzarle come classi a parte (a meno che non si
tratti di cose brevissime), in modo da poterle riutilizzare in altre
situazioni. P.es. posso fare una classe InserimentoCodiceArticolo che
e' una sottoclasse di Panel con layout a scorrimento, contiene una
label "Codice:" seguita da un campo di testo, e un'altra label che
viene riempita con la descrizione del codice, reperita dall'anagrafica
articoli se la convalida ha esito positivo. Un oggetto del genere puo'
servire in un'infinita' di finestre dove c'e' bisogno di inserire
codici articolo e mostrarne la rispettiva descrizione.
Qualcosa mi dice che e' il tipo di problema che andrebbe risolto con i
JavaBeans, ma devo ancora studiare fino a li' :-)
Ciao,  
 P.    === Replace "punto" with "." to get my email address.

e' una sottoclasse di Panel con layout a scorrimento, 
Sicuramente penso sia il modo piu' corretto di procedere.
Potresti spiegarmi cosa intendi con sottoclasse di Panel con layout
a scorrimento?
Ciao.