Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20

    Aggiornare jtable dopo inserimento dati

    Ciao a tutti ragazzi. ho creato questa finestra nella quale mi visualizza una tabella compilata con la query in updatequery() . ma non riesco ad aggiornarla tramite il tasto sulla stessa finestra dopo aver inserito altri dati nel db.Dopo aver chiuso la finestra e averla riaperta ovviamente la finestra è aggiornata
    Qualcuno mi dice dove sbaglio?

    codice:
    public class Docenteview {
    	private static final String root1 = "root";
    	private static final String mydb = "mydb1";
    	private static final int YES = 1234;
    	Connection conn = null;
    	Vector<String[]> rs =null;
    	PreparedStatement pst =null;
    
    	JFrame frame;
    	private static Connection db;       // La connessione col Database
        private static boolean connesso;    // Flag che indica se la connessione � attiva o meno
        private static DbConnection instance;
    	/**
    	 * @wbp.nonvisual location=405,79
    	 */
    	private final Docente docente = new Docente();
    	private JTable table;
    	
    	private  void UpdateTable() {
    		
    		try{
    			
    			
    			table = new JTable();
    			
    			
    			
    		    String query= "SELECT  settimana.nomegiorno, ora.ora, prenotazione.idaula , insegnamento.nome FROM prenotazione, insegnamento_has_docente, settimana, ora, insegnamento WHERE insegnamento_has_docente.Docente_idDocente=1 AND insegnamento_has_docente.insegnamento_idinsegnamento= prenotazione.idinsegnamento AND prenotazione.idgiorno=settimana.idgiorno AND prenotazione.idora= ora.idora AND prenotazione.idinsegnamento= insegnamento.idinsegnamento  ";
    		     DbConnection stmt1 = new DbConnection();
    	          Class.forName("com.mysql.jdbc.Driver");
    	       
    			db = DriverManager.getConnection("jdbc:mysql://127.0.0.1/" + mydb + "?user=" + root1 + "&password=" + YES);
    	         connesso=true;
    	         Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
    	         ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
    	        table.setModel(DbUtils.resultSetToTableModel(rs));
    	        }catch(Exception e)
    		{JOptionPane.showMessageDialog(null, e);}
    		}
    
    	/**
    	 * Launch the application.
    	 */
    	public static void main(String[] args) {
    		EventQueue.invokeLater(new Runnable() {
    			public void run() {
    				try {
    					Docenteview window = new Docenteview();
    					window.frame.setVisible(true);
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    	/**
    	 * Create the application.
    	 */
    	public Docenteview() {
    		UpdateTable();
    		initialize();
    	}
    
    	/**
    	 * Initialize the contents of the frame.
    	 */
    	private void initialize() {
    		frame = new JFrame();
    		frame.setBounds(100, 100, 650, 495);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		SpringLayout springLayout = new SpringLayout();
    		springLayout.putConstraint(SpringLayout.NORTH, table, 77, SpringLayout.NORTH, frame.getContentPane());
    		springLayout.putConstraint(SpringLayout.SOUTH, table, -29, SpringLayout.SOUTH, frame.getContentPane());
    		frame.getContentPane().setLayout(springLayout);
    		
    		JButton btnConferma = new JButton("Aggiorna");
    		springLayout.putConstraint(SpringLayout.WEST, btnConferma, 267, SpringLayout.WEST, frame.getContentPane());
    		springLayout.putConstraint(SpringLayout.SOUTH, btnConferma, -16, SpringLayout.NORTH, table);
    		btnConferma.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent n) {
    				
    				
    			
    				UpdateTable();// QUI DOVREBBE AGGIORNARE LA TABELLA
    				
    				
    				
    			}
    		
    			
    	});
    		frame.getContentPane().add(btnConferma);
    		
    		JButton btnEsci = new JButton("Esci");
    		springLayout.putConstraint(SpringLayout.NORTH, btnEsci, 38, SpringLayout.NORTH, frame.getContentPane());
    		btnEsci.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				System.exit(0);
    			}
    		});
    		springLayout.putConstraint(SpringLayout.EAST, btnEsci, -30, SpringLayout.EAST, frame.getContentPane());
    		frame.getContentPane().add(btnEsci);
    		springLayout.putConstraint(SpringLayout.WEST, table, 40, SpringLayout.WEST, frame.getContentPane());
    		springLayout.putConstraint(SpringLayout.EAST, table, 472, SpringLayout.WEST, frame.getContentPane());
    		frame.getContentPane().add(table);
    		initDataBindings();
    	}
    	protected void initDataBindings() {
    	}
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    chiama validate sul contenitore della JTable dopo l'aggiornamento.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    sto utilizzando table.setModel(DbUtils.resultSetToTableModel(rs)); per creare la tabella quindi dove dovrei inserirlo? ho provato table.validate() sia nel UpdateTable() e dopo nell inizializzazione ma nulla

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Richiamalo sul tuo frame. Comunque, c'è una ragione per la quale la tua classe non estenda JFrame? Cioè, volendosi rifare al paradigma della separazione della grafica dagli algoritmi, personalmente avrei organizzato in maniera un po' diversa il tutto: si aggiungo classi, è vero, ma nel complesso avrai un'organizzazione migliore (anche per quelli che dopo di te eventualmente dovranno mettere mano al tuo codice)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    grazie ma purtroppo ho già provato ad utilizzarlo sul frame ma niente...
    per la grafica sto usando windowbuilderpro

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ma tu ricrei un TableModel ogni volta? Allora dovresti provare con tableModel.fireTableDataChanged()
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    si ogni volta che si apre la finestra.
    dove devo applicarlo? nel bottone di aggiornamento? su cosa?
    grazie.
    forse dovrei inizializzare la finesta con una tabella vuota e dopo aggiornarla tramite bottone col metodo updatetable()?

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    ho usato il codice sotto ora me la aggiorna quando inserisco l'intero che serve a me.
    ma se ne inserisco u n altro no

    codice:
    btnNewButton = new JButton("New button");
    		btnNewButton.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				
    				
    				String hh="Tabella in aggiornamento...il vostro id è "+docente.getId();
    		        JOptionPane.showMessageDialog(null, hh);
    		        
    		        try{
      String query= "SELECT  settimana.nomegiorno, ora.ora, prenotazione.idaula , insegnamento.nome FROM prenotazione, insegnamento_has_docente, settimana, ora, insegnamento WHERE insegnamento_has_docente.Docente_idDocente=("+docente.getId()+") AND insegnamento_has_docente.insegnamento_idinsegnamento= prenotazione.idinsegnamento AND prenotazione.idgiorno=settimana.idgiorno AND prenotazione.idora= ora.idora AND prenotazione.idinsegnamento= insegnamento.idinsegnamento  ";
    				     DbConnection stmt1 = new DbConnection();
    			          Class.forName("com.mysql.jdbc.Driver");
    			       
    					 db = DriverManager.getConnection("jdbc:mysql://127.0.0.1/" + mydb + "?user=" + root1 + "&password=" + YES);
    			         connesso=true;
    			         Statement stmt = db.createStatement();     // Creo lo Statement per l'esecuzione della query
    			         ResultSet rs = stmt.executeQuery(query);   // Ottengo il ResultSet dell'esecuzione della query
    			         table.setModel(DbUtils.resultSetToTableModel(rs));
    			         table.repaint();
    			         table.revalidate();
    			         table = new JTable();
    			        
    			        
    			        }catch(Exception e2)
    				{JOptionPane.showMessageDialog(null, e2);}
    				}

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Sono sul cellulare quindi abbi pazienza.
    Ad un certo punto chiami setModel: ecco, spezza in 2 quella chiamata, facendoti ritornare il model dalla proceduea che lo genera via ResultSet. Setti il model e poi richiami fireDataTableChanged
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    20
    potresti applicarlo al codice che ho postato perfavore? perchè non ci sto capendo nulla sono cotto dall 'ultimo che ho postato riesco ad aggiornarla una sola volta partendo da una jtable vuota

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.