Visto l'interessamento , vi posto tutto il codice, Magari potete darmi anche consigli stilistici e di progettazione!
Avevo già modificato la casse escludendo il focuslost e l'ho reinserito al volo e su un solo campo.
Ora il problema c'è solo se il cursore è sul textfield denominato "civico" dove ho attivato il listener del focus.
Nella console non trovo eccezioni. Sicuramente sbaglio qualcosa ma non riesco a capire cosa.
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.JOptionPane;
import java.awt.*;
import java.awt.event.*;
public class AnagraficaCondominio extends JFrame implements ActionListener, DocumentListener, FocusListener
{
/**
* definito da Eclipse per versione , messo perchè mi dava un warning a destra che mi infastidiva.
*/
private static final long serialVersionUID = 1L;
public JLabel lvia = new JLabel("Indirizzo - Via :");
public JTextField via = new JTextField("" , 100); // (valore e numero caratteri visibili nel Text
public JLabel lcivico = new JLabel("Civico :");
public JTextField civico = new JTextField("" , 100);
public JTextField letteraCivico = new JTextField("" , 100);
public JLabel lnumScale = new JLabel("N° Scale/Palazzi :");
public JTextField numScale = new JTextField("", 100);
/*
public JLabel lnumAppartamenti = new JLabel("N° Appartamenti :");
public JTextField numAppartamenti = new JTextField("" , 100); // (valore e numero caratteri visibili nel Text
*/
public JButton buttonInserisci = new JButton("INSERISCI");
public JLabel lproprietario = new JLabel("Propretario (Cognome - Nome) :");
public JTextField proprietarioCognome = new JTextField("" , 100);
public JLabel ltrattino = new JLabel(" - ");
public JTextField proprietarioNome = new JTextField("" , 100);
public JLabel lpiano = new JLabel("Piano :");
public JTextField piano = new JTextField("" , 100);
public JLabel lscala = new JLabel("Scala :");
public JTextField scala = new JTextField("" , 100);
public JLabel linterno = new JLabel("Interno :");
public JTextField interno = new JTextField("" , 100);
public JLabel lmillesimi = new JLabel("Millesimi :");
public JTextField millesimi1 = new JTextField("" , 100);
public JLabel lmillesimiv = new JLabel(",");
public JTextField millesimi2 = new JTextField("" , 100);
public JLabel lcantina = new JLabel("Cantina :");
public String[] sceltaCantina = {"N" , "S"};
private JComboBox comboCantina = new JComboBox(sceltaCantina);
public JButton buttonAggiungiAppartamento = new JButton("APPARTAMENTO");
public DefaultTableModel strutturaTabellaAppartamenti = new DefaultTableModel(); // oggetto per definire struttura tabella da includere JTable che verra incluso in JScrollpanel
public JTable tabellaAppartamenti = new JTable(strutturaTabellaAppartamenti) // Oggetto Jtable , deve contenere un DefaultTableModel(vedi Sopra)
{
@Override public boolean isCellEditable(int row, int col) // Riscrivo in maniera statica il metodo di Jtabel
{ // altrimenti le celle sono editabili , unico modo per farlo
return false; // (che cazzata sto Java)
}
};
public JScrollPane scrollAppartamenti = new JScrollPane(tabellaAppartamenti); // jScroll per visualizzazione jtable con jmodel
public Integer numeroRigheScroll=0; // Classe Integer
public Container contenitore = this.getContentPane(); // contenitore dove mettere uno o piu Panel
public JPanel pannello = new JPanel(); //Creo Panel finestra dove aggiungero oggetti , na finestra può avere più panell e un panell piu' oggetti
public AnagraficaCondominio()
{
super(); // chiamo costruttore superclasse
this.setBounds(400,150,780,600); // invece di chiamare le due istruzione soprastanti , setBounds imposta posizione e dimensioni finestra insieme
this.setDefaultCloseOperation(EXIT_ON_CLOSE); //metodo attivato all'evento chiusura finestra con variabile final che indica di chiudere applicazione alla chiusura finestra
this.attivoAscoltatori();
this.disegnoFinestra();
}
public void disegnoFinestra()
{
pannello.setLayout (null); // inibisce il posizionamento automatico degli oggetti dobbiamo però associare ad ogni oggetto , posizione e grandezza
// coordinate posizione Nome e altri oggetti (distanza da sinistra , distanza dall'alto, lungezza , altezza in pixel)
lvia.setBounds ( 10 , 60 , 130 , 20);
via.setBounds (120 , 60 , 520 , 20);
via.setToolTipText("Indirizzo del Condominio");
lcivico.setBounds (650 , 60 , 50 , 20);
civico.setBounds (695 , 60 , 35 , 20);
civico.setToolTipText("Numero Civico senza Lettera");
letteraCivico.setBounds (730 , 60 , 20 , 20);
letteraCivico.setToolTipText("Eventuale lettera del civico(Facoltativo)");
lnumScale.setBounds ( 10 , 100, 130 , 20);
numScale.setBounds (120 , 100, 50 , 20);
numScale.setToolTipText("Numero delle scale del condominio(Facoltativo)");
/*
lnumAppartamenti.setBounds (200 , 100, 130 , 20);
numAppartamenti.setBounds (310 , 100, 50 , 20);
numAppartamenti.setEditable(false);
numAppartamenti.setToolTipText("Numero appartamenti del condominio si incrementa da solo");
*/
buttonInserisci.setBounds (310 , 140 , 140 , 20);
lproprietario.setBounds (10 , 180 , 190 , 20);
proprietarioCognome.setBounds (205 , 180 , 250 , 20);
proprietarioCognome.setToolTipText("Cognome del proprietario");
ltrattino.setBounds (470 , 180 , 15 , 20);
proprietarioNome.setBounds (500 , 180 , 255 , 20);
proprietarioNome.setToolTipText("Nome del proprietario");
lpiano.setBounds ( 55 , 220 , 70 , 20);
piano.setBounds (120 , 220 , 70 , 20);
piano.setToolTipText("Piano appartamento");
lscala.setBounds (205 , 220 , 70 , 20);
scala.setBounds (260 , 220 , 70 , 20);
scala.setToolTipText("Scala appartamento");
linterno.setBounds (350 , 220 , 50 , 20);
interno.setBounds (405 , 220 , 50 , 20);
interno.setToolTipText("Interno appartamento");
lcantina.setBounds (500 , 220 , 50 , 20);
comboCantina.setBounds (560 , 220 , 40 , 20);
comboCantina.setToolTipText("Cantina SI/NO");
lmillesimi.setBounds (615 , 220 , 70 , 20);
millesimi1.setBounds (680 , 220 , 40 , 20);
millesimi1.setToolTipText("Millesimi parte intera");
lmillesimiv.setBounds (720 , 220 , 10 , 20);
millesimi2.setBounds (725 , 220 , 30 , 20);
millesimi2.setToolTipText("Millesimi parte decimale");
buttonAggiungiAppartamento.setBounds(310 , 260 , 140 , 20);
scrollAppartamenti.setBounds ( 10 , 300 , 745 , 250);
/* proteggo campi appartamento da sproteggere dopo inserimento condominio */
proprietarioCognome.setEditable(false);
proprietarioNome.setEditable(false);
piano.setEditable(false);
scala.setEditable(false);
interno.setEditable(false);
comboCantina.setEnabled(false);
millesimi1.setEditable(false);
millesimi2.setEditable(false);
buttonAggiungiAppartamento.setEnabled(false);
buttonInserisci.setEnabled(false);
/* Fine */
pannello.add(lvia);
pannello.add(via);
pannello.add(lcivico);
pannello.add(civico);
pannello.add(letteraCivico);
/*
pannello.add(lnumAppartamenti);
pannello.add(numAppartamenti);
*/
pannello.add(lnumScale);
pannello.add(numScale);
pannello.add(buttonInserisci);
pannello.add(lproprietario);
pannello.add(proprietarioCognome);
pannello.add(proprietarioNome);
pannello.add(ltrattino);
pannello.add(lpiano);
pannello.add(piano);
pannello.add(lscala);
pannello.add(scala);
pannello.add(linterno);
pannello.add(interno);
pannello.add(lcantina);
pannello.add(comboCantina);
pannello.add(lmillesimi);
pannello.add(millesimi1);
pannello.add(lmillesimiv);
pannello.add(millesimi2);
pannello.add(buttonAggiungiAppartamento);
/*definisco struttura tabella per scroll */
strutturaScroll();
pannello.add(scrollAppartamenti);
contenitore.add(pannello);
via.requestFocusInWindow(); // cursore su TextNome
this.setVisible(true);
}
public void attivoAscoltatori()
{
/* istanzio oggetti ascoltatori per controllo valore Campi */
AscoltaNumero ascoltaNumero = new AscoltaNumero();
AscoltaTesto ascoltaTesto = new AscoltaTesto();
/*Attivo ascoltatori per Gestione Inserimento Condominio */
via.addKeyListener(ascoltaTesto);
via.getDocument().addDocumentListener(this);
numScale.addKeyListener(ascoltaNumero);
numScale.getDocument().addDocumentListener(this);
civico.addKeyListener(ascoltaNumero);
civico.getDocument().addDocumentListener(this);
civico.addFocusListener(this);
letteraCivico.addKeyListener(ascoltaTesto);
letteraCivico.getDocument().addDocumentListener(this);
buttonInserisci.addActionListener(this);
/*Attivo ascoltatori per Gestione Inserimento Appartamento */
proprietarioCognome.addKeyListener(ascoltaTesto);
proprietarioCognome.getDocument().addDocumentListener(this);
proprietarioNome.addKeyListener(ascoltaTesto);
proprietarioNome.getDocument().addDocumentListener(this);
piano.addKeyListener(ascoltaNumero);
piano.getDocument().addDocumentListener(this);
scala.addKeyListener(ascoltaTesto);
scala.getDocument().addDocumentListener(this);
interno.addKeyListener(ascoltaNumero);
interno.getDocument().addDocumentListener(this);
millesimi1.addKeyListener(ascoltaNumero);
millesimi1.getDocument().addDocumentListener(this);
millesimi2.addKeyListener(ascoltaNumero);
millesimi2.getDocument().addDocumentListener(this);
buttonAggiungiAppartamento.addActionListener(this);
}
public void strutturaScroll()
{
strutturaTabellaAppartamenti.addColumn("Interno");
strutturaTabellaAppartamenti.addColumn("Cognome");
strutturaTabellaAppartamenti.addColumn("Nome");
strutturaTabellaAppartamenti.addColumn("Piano");
strutturaTabellaAppartamenti.addColumn("Scala");
strutturaTabellaAppartamenti.addColumn("Cantina");
strutturaTabellaAppartamenti.addColumn("Millesimi");
}
@Override
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand()=="INSERISCI")
{
normalizzaCampiInt();
Integer numero=0;
if (numScale.getText().length() == 0) /*se non digitato ci metto il Valore Dell'Integer */
{
numScale.setText("1");
}
else /*Se digitato lo trasformo in integer per evitare 000 string che deve essere 0*/
{
numero= Integer.parseInt(numScale.getText());
numScale.setText(numero.toString());
if (numero== 0)
{
numScale.setText("1");
}
}
InsPalazzo insPalazzo = new InsPalazzo(via.getText() ,
( civico.getText() + letteraCivico.getText() ),
numScale.getText());
insPalazzo.inserisci();
System.out.println(insPalazzo.continua + " " + insPalazzo.inserito);
if (insPalazzo.continua==false)
{
dispose();
}
if (insPalazzo.inserito==true)
{
via.setEditable(false);
civico.setEditable(false);
numScale.setEditable(false);
letteraCivico.setEditable(false);
proprietarioCognome.setEditable(true);
proprietarioNome.setEditable(true);
piano.setEditable(true);
if (numScale.getText().equals("1")) /* non digitato , digitato 0 o digitato 1 vedi prima di istanza oggetto InsPalazzo*/
{
scala.setEditable(false);
scala.setFocusable(false);
scala.setText("A");
}
else
{
scala.setEditable(true);
}
interno.setEditable(true);
comboCantina.setEnabled(true);
millesimi1.setEditable(true);
millesimi2.setEditable(true);
buttonInserisci.setEnabled(false);
}
}
if (e.getActionCommand()=="APPARTAMENTO")
{
normalizzaCampiInt();
/* Inserisco Appartamento */
InsAppartamento insAppartamento = new InsAppartamento (via.getText() ,
( civico.getText() + letteraCivico.getText() ),
numScale.getText(),
interno.getText() ,
proprietarioCognome.getText(),
proprietarioNome.getText(),
piano.getText(),
scala.getText(),
(String)comboCantina.getSelectedItem() ,
millesimi1.getText() + "," + millesimi2.getText());
insAppartamento.inserisci();
/* valorizzo scroll */
strutturaTabellaAppartamenti.setRowCount(numeroRigheScroll + 1);
strutturaTabellaAppartamenti.setValueAt(interno.getText() , numeroRigheScroll , 0);
strutturaTabellaAppartamenti.setValueAt(proprietarioCognome.getText() , numeroRigheScroll , 1);
strutturaTabellaAppartamenti.setValueAt(proprietarioNome.getText() , numeroRigheScroll , 2);
strutturaTabellaAppartamenti.setValueAt(piano.getText() , numeroRigheScroll , 3);
strutturaTabellaAppartamenti.setValueAt(scala.getText() , numeroRigheScroll , 4);
strutturaTabellaAppartamenti.setValueAt((String)comboCantina.getSelectedItem() , numeroRigheScroll , 5);
strutturaTabellaAppartamenti.setValueAt(millesimi1.getText() + "," + millesimi2.getText() , numeroRigheScroll , 6);
numeroRigheScroll++;
/* numAppartamenti.setText(numeroRigheScroll.toString()); numRigheScroll è Definito come classe Integer per questa istruzione poi asteriscata */
interno.setText("");
proprietarioNome.setText("");
proprietarioCognome.setText("");
piano.setText("");
if (!numScale.getText().equals("1")) scala.setText("");
comboCantina.setSelectedIndex(0);
millesimi1.setText("");
millesimi2.setText("");
proprietarioCognome.requestFocusInWindow();
}
}
public void normalizzaCampiInt()
{
if (civico.getText().length() > 0)
{
Integer numero=0;
numero=Integer.parseInt(civico.getText());
civico.setText(numero.toString());
}
if (numScale.getText().length() > 0)
{
Integer numero=0;
numero= Integer.parseInt(numScale.getText());
numScale.setText(numero.toString());
}
if(interno.getText().length() > 0)
{
Integer numero=0;
numero= Integer.parseInt(interno.getText());
interno.setText(numero.toString());
}
if(piano.getText().length() > 0)
{
Integer numero=0;
numero= Integer.parseInt(piano.getText());
piano.setText(numero.toString());
}
if(millesimi1.getText().length() > 0)
{
Integer numero=0;
numero= Integer.parseInt(millesimi1.getText());
millesimi1.setText(numero.toString());
}
}
public void attivaTasti()
{
if (via.isEditable() )
{
if(via.getText().length() > 0 && civico.getText().length() > 0 )
{
buttonInserisci.setEnabled(true);
}
else
{
buttonInserisci.setEnabled(false);
}
}
else if (proprietarioCognome.getText().length() > 0 && proprietarioNome.getText().length() > 0 &&
piano.getText().length() > 0 && scala.getText().length() > 0 &&
interno.getText().length() > 0 && millesimi1.getText().length() > 0 && millesimi2.getText().length() > 0)
{
buttonAggiungiAppartamento.setEnabled(true);
}
else
{
buttonAggiungiAppartamento.setEnabled(false);
}
}
public void insertUpdate(DocumentEvent e)
{
attivaTasti();
}
public void removeUpdate(DocumentEvent e)
{
// TODO Auto-generated method stub
attivaTasti();
}
public void changedUpdate(DocumentEvent e)
{
attivaTasti();
}
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
normalizzaCampiInt();
}
}