Ciao e grazie, provo a mettere più codice:
Main:
codice:
public void visualizzaOrdine() throws ParseException {
//recupero il codice del cliente selezionato
Runnable visualizza = new Runnable() {
public void run() {
if (libriTable.getSelectedRowCount() != 0) {
progressBar.setIndeterminate(true);
operazione = "cliente";
int row = libriTable.getSelectedRow();
String cod = (String) libriTable.getValueAt(row, 0);
//nomeCliente=libriTable.getValueAt(row, 2)+" "+libriTable.getValueAt(row, 1);
codCliente = cod;
nomeCliente = getNomeCliente();
Database.eseguiAggiornamento("LOCK TABLES `Ordini` WRITE, `SpecOrdini` WRITE");
String q = "SELECT * FROM `Ordini` WHERE `ID_Cliente` LIKE '" + cod + "' ORDER BY `ID` ASC";
Vector f = Database.eseguiSelectQuery(q);
System.out.println("ORDINI per " + cod + ": " + f.size());
if (f.size() == 0) {
JOptionPane.showMessageDialog(null, "Nessun ordine attivo per il cliente selezionato!", "Errore", JOptionPane.ERROR_MESSAGE);
progressBar.setIndeterminate(false);
} else {
//per ogni ordine, recupero da SPECORDINE i dettagli
//costruisco l'array che passerò poi a VisualizzaOrdine
//String[][] totLibri = new String[f.size()+1][10];
ArrayList<String[]> totLibri = new ArrayList<String[]>();
String[][] riassOrdini = new String[f.size()][7];
//int countOrdine=0;
int totOrdine = 0;
progressBar.setIndeterminate(false);
ProgressMonitor progressMonitor = new ProgressMonitor(mainPanel,
"Sto recuperando gli ordini del cliente...",
"", 0, f.size());
progressMonitor.setMillisToDecideToPopup(0);
progressMonitor.setMillisToPopup(0);
for (int y = 0; y < f.size(); y++) {
String[] o = (String[]) f.elementAt(y);
q = "SELECT * FROM `SpecOrdini` WHERE `ID_Ordine` LIKE '" + o[1] + "'";
Vector w = Database.eseguiSelectQuery(q);
System.out.println("LIBRI per " + o[1] + ": " + w.size());
riassOrdini[y][0] = o[1];//codice ordine
riassOrdini[y][1] = o[3];//data dell'ordine
riassOrdini[y][2] = "" + w.size();//libri in ordine
riassOrdini[y][4] = aggiornaStatoOrdine(o[1], false);//stato dell'ordine
riassOrdini[y][5] = o[5];//acconto
riassOrdini[y][6] = o[6];//stato acconto
double prezzo = 0;
for (int u = 0; u < w.size(); u++) {
String[] lib = (String[]) w.elementAt(u);
System.out.println(lib[2] + " - " + lib[3]);
String[] lib2 = new String[11];
lib2[0] = o[1];//codice ordine
lib2[1] = lib[0];//ID
lib2[2] = lib[2];//isbn
lib2[3] = lib[3];//titolo
lib2[4] = lib[4];//autore
lib2[5] = lib[5];//editore
//NumberFormat value2=NumberFormat.getCurrencyInstance(Locale.ITALY);
//Number n=value2.parse(lib[6]);
lib2[6] = lib[6];//prezzo
lib2[7] = lib[7];//stato
lib2[8] = lib[8];//data dell'ultima operazione
lib2[9] = lib[9];//modalità ordine
lib2[10] = lib[10];//quantità libro
totLibri.add(lib2);
NumberFormat value2 = NumberFormat.getCurrencyInstance(Locale.ITALY);
Number n;
try {
n = value2.parse(lib[6]);
prezzo += n.doubleValue();
} catch (ParseException ex) {
Logger.getLogger(OrdineLibroView.class.getName()).log(Level.SEVERE, null, ex);
}
//countOrdine++;
}
riassOrdini[y][3] = "" + round(prezzo, 2);//prezzo totale ordine
progressMonitor.setProgress(y + 1);
}
System.out.println("*TOTLibri=" + totLibri.size() + " - riassOrdine=" + riassOrdini.length);
//apro la finestra
VisualizzaOrdine vo = new VisualizzaOrdine(null, true);
vo.setLocationRelativeTo(mainPanel);
vo.popola(totLibri, riassOrdini);
vo.setVisible(true);
jButton4ActionPerformed(null);
}
Database.eseguiAggiornamento("UNLOCK TABLES");
} else {
JOptionPane.showMessageDialog(null, "Selezionare prima un cliente!", "Errore", JOptionPane.WARNING_MESSAGE);
}
}
};
new Thread(visualizza).start();
}
VisualizzaOrdine:
codice:
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
//costruisco un array per ogni libro e poi appendo alla lista
Runnable visualizza = new Runnable() {
public void run() {
System.out.println("Sto recuperando tutti gli ordini...");
ArrayList<String[]> libri = new ArrayList<String[]>();
ProgressMonitor progressMonitor = new ProgressMonitor(null,
"Sto recuperando tutti gli ordini...",
"", 0, valori.size());
for (int i = 0; i < valori.size(); i++) {
String[] lib = new String[11];
lib[0] = valori.get(i)[0];//ID_Ordine
lib[1] = valori.get(i)[2];//isbn
lib[2] = valori.get(i)[3];//titolo
lib[3] = valori.get(i)[4];//autore
lib[4] = valori.get(i)[6];//prezzo
lib[5] = valori.get(i)[10];//quantità
lib[6] = valori.get(i)[7];//stato
lib[7] = valori.get(i)[8];//data ultima operazione
lib[8] = OrdineLibroView.aggiornaStatoOrdine(lib[0], false);//stato ordine
lib[9] = "false";
for(int t=0;t<tabRiassOrdini.getRowCount();t++){
if(tabRiassOrdini.getValueAt(t, 0).equals(lib[0])){
lib[10]=(String) tabRiassOrdini.getValueAt(t, 5);
break;
}
}
//lib[10] = OrdineLibroView.getAcconto(lib[0]);//acconto ordine
libri.add(lib);
progressMonitor.setProgress(i + 1);
System.out.println("Progress: "+(i+1));
}
System.out.println("FINE");
try {
OrdineLibroView.stampaRapportoConsegna(libri, false);
} catch (ParseException ex) {
System.err.println(ex);
}
}
};
try {
new Thread(visualizza).start();
} catch (Exception ex) {
System.out.println(ex);
}
}
Come è ovvio, il main, dove il monitor viene mostrato correttamente, chiama VisualizzaOrdine, dove appunto il progressMonitor non appare.
Grazie