Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: Jtable ....

  1. #1
    dvx80
    Guest

    Jtable ....

    Allora sto usando questo bellissimo componente swing ma c'č una cos che non riesco a far funzionare. La Table la definisco cosi.
    codice:
    	makeModel(fcodart.getText());
    	table = new JTable();
    	table.setModel(model);
    	tablepane = new JScrollPane(table);
    	tablepane.addFocusListener(this);
    Questo il metodo che definisce il modello.

    codice:
    private void makeModel(String codArt) {
      model.setColumnIdentifiers(new Object[]{"codart","nomart","numsta"});
      try{
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         connection=DriverManager.getConnection("jdbc:odbc:\\cartellini");
         Statement statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
         statement.execute("SELECT * FROM Doc WHERE codart='"+codArt+"'AND azienda='"+azienda+"' ORDER BY codart,nomart");
         ResultSet r=statement.getResultSet();
         while(r.next()){
     	model.addRow(new Object[]{r.getString("codart"),r.getString("nomart"),r.getString("numsta")});
         }
        
         if(model==null)
           model.addRow(new Object[]{" "," "," "});
       }catch(Exception ex){System.out.println(ex);}
       model.fireTableDataChanged();
    }
    Bene il problema stā nel fatto che devo aggiornare i valori della Table a seconda del valore presente nella TextField codart.
    In pratica per come č impostato adesso non riesco a cancellare i dati vecchi quando vado a cambiare il valore di codart.

    Cosa devo fare? Dov'č che sbaglio?


    TNX .....

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    i metodi da usare sono
    void setValueAt(Object aValue, int row, int column)
    o
    Vector getDataVector()
    e modificare il Vector
    va chiamato anche un repaint o validate
    :gren: :gren:

  3. #3
    dvx80
    Guest
    allora usando il setValueAt() quando mi crea la table per la prima volta mi di un java.lang.NullPointerException ovviamente.

    Devo solo trovare un modo per portare a null il mio model o quel che sia ogni volta che aggiorno la tabella, niente di pių...

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    crea un Vector lo cambi e lo assegni con setDataVector

  5. #5
    dvx80
    Guest
    seguendo il tuo consiglio l'ho modificato cosi ma mi da due null pointer exception sul setDataVector().....

    codice:
      Vector nomCol=new Vector();
      nomCol.addElement("codart");
      nomCol.addElement("nomart");
      nomCol.addElement("codart");
      
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      connection=DriverManager.getConnection("jdbc:odbc:\\cartellini");
      Statement statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
      statement.execute("SELECT * FROM Doc WHERE codart='"+codArt+"' AND azienda='"+azienda+"' ORDER BY codart,nomart");
      ResultSet r=statement.getResultSet();
      Vector data=new Vector();
      while(r.next()){
    	data.addElement(r.getString("codart"));
    	data.addElement(r.getString("nomart"));
    	data.addElement(r.getString("numsta"));
      }
      model.setDataVector(data,nomCol);
    xchč ???

  6. #6
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    se posti anche l'errore č meglio

  7. #7
    dvx80
    Guest
    non so cosa ci si possa capire cmq

    codice:
    java.lang.ClassCastException
    java.lang.ClassCastException
    	at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:617)
    	at javax.swing.JTable.getValueAt(JTable.java:1760)
    	at javax.swing.JTable.prepareRenderer(JTable.java:3686)
    	at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:1149)
    	at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:1051)
    	at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:974)
    	at javax.swing.plaf.ComponentUI.update(ComponentUI.java:142)
    	at javax.swing.JComponent.paintComponent(JComponent.java:541)
    	at javax.swing.JComponent.paint(JComponent.java:808)
    	at javax.swing.JComponent.paintChildren(JComponent.java:647)
    	at javax.swing.JComponent.paint(JComponent.java:817)
    	at javax.swing.JViewport.paint(JViewport.java:707)
    	at javax.swing.JComponent.paintChildren(JComponent.java:647)
    	at javax.swing.JComponent.paint(JComponent.java:817)
    	at javax.swing.JComponent.paintWithOffscreenBuffer(JComponent.java:4771)
    	at javax.swing.JComponent.paintDoubleBuffered(JComponent.java:4724)
    	at javax.swing.JComponent._paintImmediately(JComponent.java:4668)
    	at javax.swing.JComponent.paintImmediately(JComponent.java:4477)
    	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:410)
    	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:117)
    	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:448)
    	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

  8. #8
    dvx80
    Guest
    non importa ho risolto facendo un mix tra la tua soluzione e la mia. La posto non si sa mai che possa servire a qualcuno

    codice:
    	private void makeModel(String codArt) {
    
    		Vector nomCol=new Vector();
    		nomCol.addElement("nomart");
    		nomCol.addElement("numsta");
    		model.setDataVector(new Vector(),nomCol);
    
    		try{
    			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    			connection=DriverManager.getConnection("jdbc:odbc:\\cartellini");
    			Statement statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    			if(tipo.equals("Articolo"))
    				statement.execute("SELECT * FROM Doc WHERE codart='"+codArt+"' AND azienda='"+azienda+"' ORDER BY codart,nomart");
    			ResultSet r=statement.getResultSet();
    			while(r.next()){
    				if(tipo.equals("Articolo"))
    					model.addRow(new Object[]{r.getString("nomart"),new Integer(r.getInt("numsta"))});
    			}
    			System.out.println(model.getRowCount());
    			if(model.getRowCount()==0)
    				model.addRow(new Object[]{" ",new Integer(0)});
    
    		}catch(Exception ex){System.out.println(ex);}
    
    		model.fireTableDataChanged();
    
    	}

  9. #9
    dvx80
    Guest
    Ho ancora un problemino ....

    Doveri aggiungere un ascoltatore alla mia tabella in modo di sapere quando una detterminata cella č stata modificata, in modo da poter lanciare dei controlli.

    Che Listener devo usare?

  10. #10
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    JTable implementa il CellEditorListener
    direi che ti basta definire i metodi
    void editingCanceled(ChangeEvent e)
    void editingStopped(ChangeEvent e)
    :gren: :gren: :gren: :gren:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.