Il problema come da titolo: ho stabilito correttamente la connessione al db e i vector vD e vP ricevono correttamente i dati, ma non riesco ad inserirli nella jtable: mi visualizza solamente i titoli di colonna ma nessuna riga. Cosa sbaglio? ecco il codice del table model:
e del frame che lo richiama:
Nel frame il listener jcclistener serve teoricamente ad aggiornare la tabella al cambio dei clienti nel jbutton. Insomma voglio che selezionando un cliente mi visualizzi in tabella i prezzi dei prodotti che richiede quel cliente. Poi da questo punto dovrei implementare ulteriormente ma per ora la visualizzazione della tabella è l'obiettivo principale. Grazie per qualsiasi consiglio... Nel frattempo :book::book::book:
HTML:
public class TabModCliPre extends DefaultTableModel {
private int rowstot;
private final String cli;
private Object val;
public TabModCliPre(String cli){
this.cli = cli;
}
@Override
public int getRowCount() {
try {
Connection connection;
Class.forName ("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://dang83-notebook:3306/Gestipan", "dang83", "08081983");
String sql = "Select DescProd from TPrezzi where RagSoc=?";
PreparedStatement stm = connection.prepareStatement(sql);
stm.setString(1, cli);
ResultSet id = stm.executeQuery();
id.isFirst();
rowstot=0;
while (id.next()){
rowstot++;
}
stm.close();
id.close();
connection.close();
}
catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(TabModCliPre.class.getName()).log(Level.SEVERE, null, ex);
}
return rowstot;
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int col){
String name = null;
switch (col){
case 0:
name = "Descrizione Prodotto";
break;
case 1:
name = "Prezzo in € esclusa IVA";
break;
}
return name;
}
@Override
public Class getColumnClass(int columnIndex){
switch (columnIndex){
case 0:
return String.class;
case 1:
return Float.class;
}
return Object.class;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex){
return columnIndex==1;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
try {
Connection connection;
Class.forName ("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://dang83-notebook:3306/Gestipan", "dang83", "08081983");
String sql = "Select DescProd, Prezzo from TPrezzi where RagSoc=?";
ResultSet id;
PreparedStatement stm = connection.prepareStatement(sql);
stm.setString(1, cli);
id = stm.executeQuery();
Vector vD = new Vector();
Vector vP = new Vector();
id.first();
while (id.next()){
vD.add(id.getString(1));
vP.add(id.getFloat(2));
}
switch (columnIndex){
case 0:
for (rowIndex=0; rowIndex<rowstot; rowIndex++) {
val = vD.get(rowIndex);
System.out.println(val);
}
case 1:
for (rowIndex=0; rowIndex<rowstot; rowIndex++) {
val = vP.get(rowIndex);
System.out.println(val);
}
}
id.close();
stm.close();
connection.close();
}
catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(ModP.class.getName()).log(Level.SEVERE, null, ex);
}
return val;
}
@Override
public void setValueAt(Object val, int rowIndex, int columnIndex) {
}
}
e del frame che lo richiama:
HTML:
public class ModP extends JFrame {
private JComboBox jccliente;
private JTable jtpp;
private JPanel north;
private JPanel center;
private JPanel south;
private JButton jbagg;
private JLabel jlint;
private String cli;
private JFrame modp;
private Connection connection;
private Vector load;
private Statement stmt;
private ResultSet rs;
private TableModel pctm;
private JButton jbvis;
public ModP() throws SQLException, ClassNotFoundException {
super ("Modifica Prezzi Clienti");
setBounds(10,35,150,150);
getContentPane().setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
jccliente = new JComboBox();
jccliente.setModel(CliModel.model());
jbvis = new JButton ("Visualizza");
jbvis.addActionListener(new jcclistener());
north = new JPanel();
north.add(jccliente);
north.add(jbvis);
jtpp = new JTable();
DefaultTableModel tabmod = new TabModCliPre(cli);
jtpp.setModel(tabmod);
center = new JPanel();
JScrollPane jsp = new JScrollPane(jtpp);
center.add(jsp);
//Costruzione pannello principale
modp = new JFrame();
getContentPane().add(north, BorderLayout.NORTH);
getContentPane().add(center, BorderLayout.CENTER);
pack();
}
class jcclistener implements ActionListener {
@Override
public void actionPerformed (ActionEvent e) {
cli = (String) jccliente.getSelectedItem();
System.out.println(cli);
}
}
}
Nel frame il listener jcclistener serve teoricamente ad aggiornare la tabella al cambio dei clienti nel jbutton. Insomma voglio che selezionando un cliente mi visualizzi in tabella i prezzi dei prodotti che richiede quel cliente. Poi da questo punto dovrei implementare ulteriormente ma per ora la visualizzazione della tabella è l'obiettivo principale. Grazie per qualsiasi consiglio... Nel frattempo :book::book::book: