PDA

Visualizza versione completa : [JAVA] Controllo contenuto stringhe


Downloader
15-02-2007, 00.30.23
Ok, ok è tardi, dovrei andare a letto e pensarci domani, ma proprio non ci riesco.

Sto iniziando a creare una piccola Gui che compilati 3 campi andrà poi a generare un file, scrivendo le informazioni inserite.

Al momento del controllo per vedere se tutti i campi sono stati compilati c'è il problema, praticamente è come se il controllo non andasse, anche se tutti i campi non fossero riempiti il programma continuerebbe a girare senza problemi e questo è un problema visto che obbligatoriamente tutti i campi devono essere compilati.


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.*;

public class InserisciDati extends JFrame
{
JButton bottone1;
public JTextField autore;
public JTextField titolo;
public JTextField editore;
JLabel label_autore;
JLabel label_titolo;
JLabel label_editore;


public static void main(String[] args)
{
new InserisciDati();
}

public InserisciDati()
{
this.setTitle("Inserisci i dati da salvare nel file!");
this.setLocation(250,250);
this.setSize(400,150);
this.setLayout(new GridLayout(4,2));
this.creaGui();

this.add(label_autore);
this.add(autore);

this.add(label_titolo);
this.add(titolo);

this.add(label_editore);
this.add(editore);

this.add(bottone1);

this.gestioneEventi();
this.setVisible(true);
}

public void creaGui()
{
autore = new JTextField();
titolo = new JTextField();
editore = new JTextField();

label_autore = new JLabel("Nome autore: ");
label_titolo = new JLabel("Titolo libro: ");
label_editore = new JLabel("Casa editrice: ");

bottone1 = new JButton("Scrivi sul file");
}

public void gestioneEventi()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
bottone1.addActionListener(new AscoltatorePulsante());
}

// Inner class

public class AscoltatorePulsante implements ActionListener
{
public boolean controlloCampi()
{
boolean flag = false;
String s1 = (String) autore.getText();

//if ( (autore.getText()) == "" )
if (s1 == "")
flag = false;
else
System.out.println("Sono passato"); flag = true;

return flag;
}

public void actionPerformed(ActionEvent e)
{
Object a = e.getSource();

if (a == bottone1)
{
boolean flag = controlloCampi();

if (flag == false)
System.out.println("Errore! Uno o piu' campi non correttamente riempiti");
else
System.out.println("Tutti i campi sono stati correttamente riempiti");

}
}
}

// Fine Inner Class

}



Le aree di testo sono classi JTextField.
Per semplicità nel metodo "controlloCampi()" ho fatto il controllo solo sull'oggetto "autore".


Come potrei risolvere??

tnx! ;)

Dav82
15-02-2007, 00.38.38
I controlli sull'uguaglianza di stringhe si fanno col metodo equals() :p

Il metodo equals() verifica l'eguaglianza del contenuto dei due oggetti String, mentre l'operatore "==" verificare l'eguaglianza dei riferimenti in memoria... e poiché compari due oggetti che non sono lo stesso oggetto (la stringa s1 e la stringa creata al volo di contenuto nullo), il risultato del confronto sarà sempre false ;)

In parole povere:

if (s1.equals(""))

oppure

if (s1.equals(new String(""))

non mi ricordo se va bene anche il primo, sono un po' (tanto) arruginito ;)

Downloader
15-02-2007, 00.44.27
Cosi potrebbe andrebbe bene??

if ((autore.getText()).equals(""))

Dav82
15-02-2007, 00.44.55
Uh ecco, oltre che arruginito sono pure addormentato!

La variabile flag ti risulterà SEMPRE true, perché le assegni il valore true indipendentemente dal controllo sull'uguaglianza fra s1 e "". In pratica ti sei dimenticato di racchiudere le due istruzioni del ramo else nelle parentesi graffe ;) (non si fanno questi errori! http://www.vocinelweb.it/faccine/fattedanoi/666/48.gif :D)


Vabbè, abbiamo beccato due errori ;)

Dav82
15-02-2007, 00.45.26
Potrei fare quindi cosi:

if ((autore.getText()).equals(""))

(Y)

Downloader
15-02-2007, 00.48.35
Uh ecco, oltre che arruginito sono pure addormentato!

La variabile flag ti risulterà SEMPRE true, perché le assegni il valore true indipendentemente dal controllo sull'uguaglianza fra s1 e "". In pratica ti sei dimenticato di racchiudere le due istruzioni del ramo else nelle parentesi graffe ;) (non si fanno questi errori! http://www.vocinelweb.it/faccine/fattedanoi/666/48.gif :D)


Vabbè, abbiamo beccato due errori ;)

A##o, basta, prima di digitare un'altra miriade di bit spazzatura do un "shutdown -h now" e me ne vado a nanna.

Buonanotte e grazie.

Dav82
15-02-2007, 00.52.57
Non abbatterti... non so se ti è mai capitato di scrivere tipo


if (flag = true)
...


e non capire perché non funziona una mazza... :D
Il sottoscritto l'ha fatto e non una volta sola :p

Downloader
15-02-2007, 00.55.33
Scusa, ultima cosa:

come posso fare per posizionare tutti gli oggetti grafici secondo le mie necessità senza dover ricorrere ai layout predefiniti che molte volte sono limitanti??

Ad esempio se volessi posizionare due pulsanti uno sotto l'altro nella parte bassa della finestra come potrei fare??
C'è un modo di personalizzare il layout?

Dav82
15-02-2007, 01.02.35
Mh... al volo non saprei aiutarti, una volta l'ho fatto utilizzando il layout vuoto (non mi ricordo quale sia il nome), ma ti assicuro che è una palla assurda se cominciano a esserci troppi elementi da sistemare...

Ti consiglio di provare con NetBeans, ha un gui-editor integrato che è molto carino (si chiamava Matisse), si fa tutto draggando-droppando ed è una bellezza :) Probabilmente anche Eclipse ha qualcosa del genere ;)

Downloader
15-02-2007, 01.07.19
Ok, grazie.

Ci risentiamo dopo.

Downloader
15-02-2007, 16.17.25
Arieccomi:


public class CreaFile extends InserisciDati
{
public final String NOME_DIRECTORY_FILE = "esempio_testo.txt";
public FileWriter fileWriter;
String autoreCF, titoloCF, editoreCF;


public CreaFile()
{
try
{
apri();

scrivi();

chiudi();
}
catch (FileNotFoundException e)
{
System.out.println("Errore verificato su FileNotFound");
e.printStackTrace();
}

catch (IOException e)
{
System.out.println("Errore verificato su IO");
e.printStackTrace();
};

}

public void apri() throws FileNotFoundException, IOException
{
fileWriter = new FileWriter(NOME_DIRECTORY_FILE);
}

public void chiudi() throws IOException, FileNotFoundException
{
fileWriter.close();
}

public void scrivi() throws IOException, FileNotFoundException
{
acquisisci();

String stringa = generaString();
fileWriter.write(stringa);
}

public void acquisisci()
{
autoreCF = esportaContenutoAutore();
titoloCF = esportaContenutoTitolo();
editoreCF = esportaContenutoEditore();
}

public String generaString()
{
return (autoreCF + " - " + titoloCF + " - " + editoreCF + "\n");
}
}


Questa è la classe delegata alla gestione del file.

Ho un problema quando vado a catturare nella funzione "acquisisci()" i valori degli oggetti "autore", "editore", "titolo" per trasformarli poi in stringhe.

La compilazione va a buon fine, viene creato correttamente il file, ma al momento di andare a scriverci dentro escono fuori una valanga di errori.

Giuro, ci sono rimasto :eek:

Questa è la classe dalla quale eredita i 3 oggetti TextField:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

public class InserisciDati extends JFrame
{
JButton scrivi;
JButton visualizza;
public JTextField autore;
public JTextField titolo;
public JTextField editore;
JLabel label_autore;
JLabel label_titolo;
JLabel label_editore;


public static void main(String[] args)
{
new InserisciDati("Inserisci i dati da salvare nel file!");
}

public InserisciDati()
{
}

public InserisciDati(String barra)
{
this.setTitle(barra);
this.setLocation(250,250);
this.setSize(400,150);
this.setLayout(new GridLayout(4,2));
this.creaGui();

this.add(label_autore);
this.add(autore);

this.add(label_titolo);
this.add(titolo);

this.add(label_editore);
this.add(editore);

this.add(scrivi);
this.add(visualizza);

this.gestioneEventi();
this.setVisible(true);
}

public void creaGui()
{
autore = new JTextField();
titolo = new JTextField();
editore = new JTextField();

label_autore = new JLabel("Nome autore: ");
label_titolo = new JLabel("Titolo libro: ");
label_editore = new JLabel("Casa editrice: ");

scrivi = new JButton("Scrivi sul file");
visualizza = new JButton("Visualizza il contenuto");
}

public void gestioneEventi()
{
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
scrivi.addActionListener(new AscoltatorePulsante());
visualizza.addActionListener(new AscoltatorePulsante());
}

public String esportaContenutoAutore()
{
return autore.getText();
}

public String esportaContenutoTitolo()
{
return titolo.getText();
}

public String esportaContenutoEditore()
{
return editore.getText();
}
// Inner class

public class AscoltatorePulsante implements ActionListener
{
int conta_autore = 0;
int conta_titolo = 0;
int conta_editore = 0;


public boolean controlloCampi()
{
boolean flag = false;
String s1 = (String) autore.getText();

if (((autore.getText()).equals("")) || ((titolo.getText()).equals("")) || ((editore.getText()).equals("")))
flag = false;
else
flag = true;

return flag;
}

public void suggerimentoCampi()
{
if ((autore.getText()).equals(""))
autore.setText("Devi inserire un nome autore");
if ((titolo.getText()).equals(""))
titolo.setText("Devi inserire il titolo del libro");
if ((editore.getText()).equals(""))
editore.setText("Devi inserire l'editore del libro");
}

public void actionPerformed(ActionEvent e)
{
Object a = e.getSource();

if (a == scrivi)
{
boolean flag = controlloCampi();

if (flag == false)
suggerimentoCampi();
else
new CreaFile();

}

if (a == visualizza)
new VisualizzaFile();

}
}

// Fine Inner Class

}

P8257 WebMaster
15-02-2007, 17.05.42
Postaci gli stacktrace.

Downloader
15-02-2007, 17.17.30
Intendi questi?

http://img258.imageshack.us/img258/7826/errorite8.gif (http://imageshack.us)

P8257 WebMaster
15-02-2007, 17.25.38
Controlla che quei textfield non siano null e non siano "".. sai molti metodi se la prendono male se gli arriva un null ...

Questo vale per tutte le operazioni in generale, con le stringhe in particolare...

Downloader
15-02-2007, 18.33.15
No, dovrebbero essere comunque no vuoti, per funzionare il programma richiede almeno 1 carattere su ogni JTextField

P8257 WebMaster
15-02-2007, 21.40.44
Mmmmm... eppure.. scusa se insisto, ma sento che da qualche parte gira un null.. verifica bene, se riesci fai un debug quando vai a fare la gettext(), se avviare il debug risulta complesso o macchinoso, fai un controllo se quell'oggetto è null e nell'else scrivi un bel messaggio sparato sulla console .. ho come l'impressione che sia lì il problema...

P8257 WebMaster
15-02-2007, 23.32.09
Cosi potrebbe andrebbe bene??

if ((autore.getText()).equals(""))

Aggiungo una postilla ..

fare così semplicemente è un po' (tanto) pericoloso ... nel senso che l'esecuzione avviene sempre da sinistra verso destra, il che vuol dire che lui prima esegue gettext e poi equals .. il che vuol dire che se c'é qualcosa che dà fastidio a 'gettext' (per esempio un null .. o magari una stringa vuota se il metodo è sensibile) ti si incazza e torna exception prima di poter eseguire equals...

Meglio scrivere codice in maniera più sicura ...



try
{
if(autore != null)
if(!autore.gettext().equals(""))
{
// .. fai quel che vuoi
}
}
catch(NullPointerException npe) {}

Downloader
18-02-2007, 19.57.15
Ok, dopo tutta una serie di smadonnamenti vari credo di essere riuscito a far funzionare tutto, il problema (anche se non ho ancora compreso la natura) è stato non risolto, ma aggirato.

Rimane solo un problemino, la sovrascrittura delle stringhe inserite.

Spiego meglio:
il programma è scritto in modo tale da dover far inserire obbligatoriamente 3 stringhe, ognuna nella relativaJTextField.

Fatto ciò i valori inseriti dall'utente vanno scritti su un file.

Mettiamo il caso che l'utente inserisca prima le seguenti stringhe relative ad un album: "Litfiba", "17RE","IRA" , sul file troverà scritta la stringa "Litfiba 17RE IRA".

Ok, ora l'utente vuole inserire un'altro disco, inserisce i dati (es: "Marlene Kuntz", "Bianco Sporco", "EMI"), quest'ultimi vengono salvati sul file, ma...i dati precedenti sono stati sovrascritti da quelli nuovi, quando invece dovrebbro essere stati scritti di seguito ai dati già inseriti.

Insomma, il puntatore al file punta all'inizio del file e non all'EOF.

Cosa si potrebbe fare?

P8257 WebMaster
19-02-2007, 09.50.25
Devi usare il filewriter in modalità append, cambia l'istanzia così:



fileWriter = new FileWriter(NOME_DIRECTORY_FILE, true);

Downloader
19-02-2007, 10.42.47
Ottimo, grazie 1000!!

Downloader
22-02-2007, 11.16.21
Ok, qualche altra cosuccia:

1) Come faccio una volta istanziato un oggetto di tipo JScrollPane a renderlo effettivamente disponibile??
Ho provato facendo cosi:


JScrollPane scroll = new JScrollPane(this /* il frame */, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

add(scroll);



La compilazione va a buon fine, ma scatena un sacco di eventi a runtime.

2) Conoscete una semplice guida che spiega come gestire gli eventi con il package swing??
E' molto diversa la gestione rispetto AWT??

3) So che c'è un metodo che se associato ad ogni oggetto grafico istanziato permette di posizionarlo secondo le proprie necessità senza dover sottostare ad un layout predefinito.

Questo metodo si chiama setBounds().

Ho provato a fare una piccola classe che implementava due pulsanti, dando ad ogni JButton un posizionamento diverso.
Purtroppo però se il primo pulsante effettivamente aveva le dimensioni e il posizionamento richiesto il secondo era gigantesco, ed occupava tutto il frame, anche lo spazio riservato all'altro bottone.

Consigli??

tnx!

P8257 WebMaster
22-02-2007, 11.27.35
Che eventi ti scatena ? .. ti scatenerà gli eventi per i quali ci sono i listener suppongo.. né più e né meno .. per una guida rapida alla migrazione awt-swing, vedi questa:

http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/

Lorenzo3
24-02-2007, 13.56.56
Non abbatterti... non so se ti è mai capitato di scrivere tipo


if (flag = true)
...


e non capire perché non funziona una mazza... :D
Il sottoscritto l'ha fatto e non una volta sola :p

Un classico direi :)

Downloader
01-03-2007, 00.25.39
Altra cosa:

Avrei la necessità di creare una finestra contenete dei tab i quali una volta selezionati mostrino una gui specifica al tipo di tab selezionato.

Ovvero:

JTabbedPane esempioTab = new JTabbedPane();
esempioTab.addTab("Registrazione cliente", new Registra());


dove Registra è una classe da me creata che ha a sua volta una gui che mi permette di inserire dati per effettuare una registrazione.

La compliazione va a buon fine, ma purtroppo a runtime c'è una eccezione riguardante un parametro non valido.

C'è un modo di risolvere ciò??

P8257 WebMaster
01-03-2007, 01.22.26
Altra cosa:

Avrei la necessità di creare una finestra contenete dei tab i quali una volta selezionati mostrino una gui specifica al tipo di tab selezionato.

Ovvero:

JTabbedPane esempioTab = new JTabbedPane();
esempioTab.addTab("Registrazione cliente", new Registra());


dove Registra è una classe da me creata che ha a sua volta una gui che mi permette di inserire dati per effettuare una registrazione.

La compliazione va a buon fine, ma purtroppo a runtime c'è una eccezione riguardante un parametro non valido.

C'è un modo di risolvere ciò??

Vediamo lo stacktrace...

Downloader
01-03-2007, 10.18.37
http://img221.imageshack.us/img221/6052/exceptiontabep3.th.jpg (http://img221.imageshack.us/my.php?image=exceptiontabep3.jpg)

P8257 WebMaster
01-03-2007, 10.46.01
Registra deve essere un JPanel, lo è, vero ?

Downloader
01-03-2007, 10.50.17
No, è una classe che estende a JFrame.

Downloader
01-03-2007, 10.55.48
Ma scommetto che se metto tutto dentro una classe che estende JPanel va tutto bene.

P8257 WebMaster
01-03-2007, 10.59.38
Ma scommetto che se metto tutto dentro una classe che estende JPanel va tutto bene.

Quando estendi una classe, l'oggetto risultante (se lo ritorni tale e quale), ha gli stessi metodi e proprietà pubblici del padre.. quindi si, ma è un accrocchio spaventoso.. fai prima ad implementare Registra come JPanel .. che è la maniera corretta di utilizzare la classe...

P8257 WebMaster
01-03-2007, 11.00.52
No, è una classe che estende a JFrame.

Non puoi aggiungere un frame a un tab, un frame è un frame, un tab al suo interno contiene un pannello...

Downloader
02-03-2007, 10.59.58
fai prima ad implementare Registra come JPanel .. che è la maniera corretta di utilizzare la classe...

No, scusa non ti ho capito qua.

P8257 WebMaster
02-03-2007, 11.03.26
No, scusa non ti ho capito qua.

Tu hai detto che Registra è un frame che volevi includere nel tab, io volevo dirti che nel tab è meglio includere un JPanel, perché le finestre a tab non contengono frame ma pannelli che a loro volta potrebbero anche contenere frame.. quindi è meglio che Registra sia un JPanel, in questo modo lo puoi aggiungere al tab senza errori, anche perché la stessa JPanel è una derivata di JComponent che è la classe che lui si aspetta come parametro...

Downloader
02-03-2007, 11.08.37
Tu hai detto che Registra è un frame che volevi includere nel tab, io volevo dirti che nel tab è meglio includere un JPanel, perché le finestre a tab non contengono frame ma pannelli che a loro volta potrebbero anche contenere frame.. quindi è meglio che Registra sia un JPanel, in questo modo lo puoi aggiungere al tab senza errori, anche perché la stessa JPanel è una derivata di JComponent che è la classe che lui si aspetta come parametro...

Ma quindi dovrei fare: class Registra extends JPanel

Ma in qualche tuo post precedente mi era sembrato di capire che non ne eri entusiasta di questa soluzione.

P8257 WebMaster
02-03-2007, 11.14.45
Ma quindi dovrei fare: class Registra extends JPanel

Ma in qualche tuo post precedente mi era sembrato di capire che non ne eri entusiasta di questa soluzione.

Si ma perché avevo capito che tu volevi mettere TUTTA l'interfaccia, compresi i tab e i frame dentro un JPanel, ho senz'altro capito male allora ...

In ogni caso è giusto, ma più che estendere JPanel, Registra è un oggetto di tipo JPanel, per esempio:



JPanel Registra = new JPanel();
Registra.setLayout(new BoxLayout(...));



Una volta creato l'oggettone Registra (che è un jpanel ma non lo estende a meno che tu non voglia crearti i tuoi controlli personalizzati all'interno del pannello), lo aggiungi al tab...

Downloader
02-03-2007, 11.29.53
Io avevo intenzione di fare cosi:

Ho un frame che ho diviso in 4 parti con GridLayout.

Ad ognuna delle 4 parti è corrisposto un metodo:
esempio:

public void panelInput()
{
panelInput = new JPanel();

panelInput.add(new GestioneUtente());

add(panelInput);
}

Il quale oltre ad andare ad istanizare l'oggetto JPanel implementa in se tramite il metodo add() un'altra classe che eredita da JPanel e che è cosi scritta:


import javax.swing.*;

public class GestioneUtente extends JPanel
{
JTabbedPane tab;

public GestioneUtente()
{
tab = new JTabbedPane(JTabbedPane.TOP);
tab.addTab("Crea nuovo profilo",new CreaUtente());
tab.addTab("Modifica profilo",new ModificaDatiUtente());
tab.addTab("Modifica profilo",new EliminaUtente());
add(tab);
}

}


Ok è tutto a posto fino a qua.


Però c'è un problemino di visualizzazione grafica dell'oggetto JTabbedPane perchè viene visualizzato cosi:

http://img54.imageshack.us/img54/678/tabsz9.jpg

anzichè cosi:
http://www.mokabyte.it/2001/04/swing8_JTabbedPaneExample.gif


C'è da dire che se lo estendo a JFrame ed ovviamente implemento il main nella sua classe la visualizzazione torna normale.
E' quindi un problema creato dal pannello, ma perchè??

P8257 WebMaster
02-03-2007, 11.56.01
Il modo corretto di utilizzo è la prima soluzione che hai usato, ovvero usare i jpanel all'interno dei tab. .il problema nasce dal fatto che il frame imposta una policy di layout arbitraria che "scavalca" quella del jtabbedpane, mentre invece con i pannelli questo non succede ed essi si ordinano in modo verticale, devi settare tu la policy da utilizzare e se non ricordo male il metodo da chiamare dovrebbe essere "settablayoutpolicy"

Per ulteriori informazioni dai un'occhiata alla javadoc di questa classe:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JTabbedPane.html#setTabPlacement(int)

Downloader
02-03-2007, 12.17.07
Ho visto, però usando il parametro "JTabbedPane.SCROLL_TAB_LAYOUT" nel metodo setTabLayoutPolicy il risultato che si ottiene è quello dell'immagine allegata.

Usando l'altro pametro (JTabbedPane.WRAP_TAB_LAYOUT) non si ottiene alcun cambiamento.

P8257 WebMaster
02-03-2007, 12.28.57
Hai provato a dimensionare la finestra che li contiene ?

Downloader
02-03-2007, 12.30.46
Si, ma niente.

P8257 WebMaster
02-03-2007, 12.37.50
Guarda bene la javadoc, anche di JComponent, nel jpanel c'é anche il modo di wrappare i tab, devi fare un po' di prove, queste cose si scoprono provando, comunque appena ho un po' più di tempo, magari oggi sul tardi, vedo di darti una mano più precisamente.

Downloader
02-03-2007, 12.39.40
Grazie 1000, intanto guardo le docs :)

Downloader
03-03-2007, 17.58.56
Web, ho trovato!!

Bastava estendere la classe non a JPanel ma bensì a JTabbedPane.

Fiuuuu!! Che faticaccia!!

Grazie e alla prossima :)

Downloader
04-03-2007, 13.08.27
Scusa, ma invece se volessi dare una dimensione da una JLabel ed a una JTextField??

Ho provato con tutti i metodi che ho trovato, setMinimum, setMaximum e setPreferredSize oltre che setSize e setMargin, ma non succede nulla.

Mi viene da pensare allora che anche qua ci siano problemi di policy, ma come si ovvia a sto problema??.

Di metodi per le policy non ne ho trovati :mmm:

Downloader
06-03-2007, 23.21.17
Vedo che nei programmi della MS ci sono del veri e propri link (uguali a quelli in HTML).

C'è un modo di farli anche in java??

P8257 WebMaster
07-03-2007, 10.00.18
Vedo che nei programmi della MS ci sono del veri e propri link (uguali a quelli in HTML).

C'è un modo di farli anche in java??

Chiedo scusa per la latitanza...

In ogni caso, tu ti riferisci alle "linklabel", non so se siano presenti nello swing classico, magari esiste qualche controllo custom creato ad hoc da qualche community o da qualche utente, dovresti provare a cercare...

Downloader
08-03-2007, 23.07.11
Ecco, questo problema invece se lo avessi dovuto affrontare in HTML lo avrei già risolto:

con BorderLayout ho realizzato un piccolo frame che implementa a sinistra e al centro un pannello.

L'idea (come spesso capita di trovare in pagine web) è di fornire tutta una serie di funzionalità nella barra a sx, schiacciato il pulsante specifico (esempio: inserisci nuovo utente) nella parte centrale del frame verrà richiamata una classe (che estende a JPanel) specifica per adempiere a quel tipo di operazione (seguendo l'esempio di prima verrebbe fatto visualizzare il form di inserimento dati).

Ma come caspio faccio a far cio??

L'idea (non so neanche in teoria quanto valida) era quella di andare a richiamare il metodo specifico che si occupa della creazione della parte centrale del frame all'interno della classe che gestisce l'evento del pulsante.


import java.awt.event.*;

public class AscoltatorePulsante extends Avvio implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object a = e.getSource();

if (a == BarraSx.inserisciUtente)
{
System.out.println("Bottone premuto");
Avvio.barraCentrale = null;
barraCentro(1); // barra centro è il metodo che gestisce la parte centrale del frame, mentre 1 indica che cosa andare ad istanziare all'interno di quella parte di frame.
}
}
}


Questo invece è il metodo barraCentro:

public void barraCentro(int scelta)
{
barraCentrale = new JPanel();
add(BorderLayout.CENTER,barraCentrale);

switch (scelta)
{

case 0:
barraCentrale.add(new JButton("prova"));
break;

case 1:
barraCentrale.add(new CreaCliente());
break;

}
barraCentrale.setVisible(true);
}



Idee su come risolvere sta cosa?

tnx!

Nanri
25-03-2007, 17.25.52
:S border layout.. ma usa un combinzione di box e boxlayout!!! Sono moooolto + potenti! vabbe..
Non ho ben capito cosa intendi fare.. se vuoi qualcosa dipo desktop puoi utilizzare JDesktopPane a cui aggiungi JInternalFrame.. in questo caso avresti delle finestre all'interno della tua applicazione.. se vuoi invece qualcosa modello frame delle pagine html potresti mettere un JPanel o una box al centro che ridefinisci di volta in volta a seconda di cosa ti serve con removeAll ed add

Downloader
25-03-2007, 20.10.39
Box e BoxLayout al momento non li conosco.

C'è un modo per inserire degli oggetti grafici (JRadioButton e JComboBox) all'interno di una JTable?

Dovrei fare due tabelle una per la modifica e una per la cancellazione di record, ma non so come si faccia.

marduk.babilonia
27-03-2007, 12.11.40
Detto in generale: se hai un pannello edevi riempirlo con dei dati (in questo caso devi riempire la JTable) devi vedere quale è il costruttore di JTable che più risponde alle tue esigenze (dati)
In pratica: crei una classe che estende JFrame, dentro alla quale ci metti un metodo che ti crea i pannelli da utilizzare come contenitori intermedi(la tabel), dentro ogni contenitore metti gli elementi che ti servono (JRadioButton e JComboBox), poi inizializzi tutto dal main()

Downloader
27-03-2007, 12.26.10
Cioè io dovrei mettere le JComboBox o quello che è fuori dalla tabella??

Non mi è chiarissima sta cosa?