Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 30
  1. #11
    OK postoil codice:
    questa è la classe che mi compone la tabella e la restituisce alla classe principale, la frame,
    la quale inserisce la tabella in un JScrollPane:

    public class ComposizioneTabella
    {
    public static JTable getTabellaFinale(final Object[][]valori, int video )
    {

    //Questa mi dà le informazioni
    Info infotmp=new Info();

    //Nomi delle colonne
    Object[] tableHeaders = {"Immagini", "Info"};
    Object[][] tableData =new Object[video][3];

    for (int i = 0; i < video; i++)
    {

    System.out.println(i+") "+valori[i][3]);
    ImageIcon tmp = null;
    JLabel tmpBottone=new JLabel();
    try {
    tmp = new ImageIcon(new URL((String) valori[i][3]));
    tmpBottone.setIcon(tmp);
    } catch (MalformedURLException e) {
    e.printStackTrace();}

    tableData[i][0]=tmpBottone;
    tableData[i][1]=infotmp.getInfo(i);
    }

    // Creo il modello della tabella e l'applico ad un istanza di Jtable
    TableModel tableModel = new DefaultTableModel(tableData, tableHeaders);
    ((DefaultTableModel)tableModel).fireTableDataChang ed();
    final JTable table = new JTable();
    table.setModel(tableModel);

    // Alla terza colonna,identificata per nome, applico l'editor e il
    // render personalizzati.
    table.getColumn("Immagini").setCellRenderer(new PanelRender());
    table.getColumn("Immagini").setCellEditor(new PanelEditor());
    table.getColumn("Info").setCellRenderer(new PanelRender());
    table.getColumn("Info").setCellEditor(new PanelEditor());
    table.setRowHeight(100);

    table.setShowGrid(false);

    table.addMouseListener(new MouseListener()
    {
    public void mouseClicked(MouseEvent mouse)
    {
    int x = mouse.getX();
    int y = mouse.getY();
    int columnIndex = table.columnAtPoint( new Point(x,y) );
    int rigaIndex=table.rowAtPoint(new Point(x,y));
    URL apri = null;
    System.out.println("Riga: "+ rigaIndex);
    String url=(String)valori[rigaIndex][2];
    Runtime r= Runtime.getRuntime();
    try {
    Process p=r.exec("explorer \""+url);
    } catch (Exception e1)
    {
    e1.printStackTrace();}
    }
    // FIne CLASSE

    Credo che le modifiche le debba fare qui
    Nella classe Frame dentro l'ActionListener ho scritto questo:

    JTable result=ComposizioneTabella.getTabellaFinale(valori , estrai.getNumVideo());
    jstabris=new JScrollPane(result);
    jstabris.repaint();
    getContentPane().add(jstabris,BorderLayout.CENTER) ;

    Grazie per ora

  2. #12
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Serve la classe che estende Frame, o se e' lunga, almeno il pezzo di codice dove dichiari e costruisci la tabella e quello dove setti il listener. In ogni caso non capisco il codice che hai messo dentro il listener, perche' dichiari una nuova tabella? Devi solo fare un repaint() della vecchia.

  3. #13
    raga io ho creato la tabella con i dati dal databese ma non riesco ad aggiungerci ulteriori colonne con dei tasti per la cancellazione die dati.

    mi aiutate?

    ecco il mio codice per il modello della tabella:

    package nuceria;
    // classe modello per le tabelle
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;

    import javax.swing.table.AbstractTableModel;

    public class TableModel extends AbstractTableModel {

    public TableModel(ResultSet aResultset){
    rs = aResultset;
    try{
    rsmd = rs.getMetaData();
    }catch (SQLException e){e.printStackTrace();}
    }
    public String getColumnName(int c){
    try{
    //metodo che setta i nomi delle colonne
    String str=rsmd.getColumnName(c+1);


    if (str.equals("id_macchina"))str ="Numero";
    if (str.equals("nome"))str ="Macchina";
    if (str.equals("descrizione"))str ="Descrizione";
    if (str.equals("Fascia_max"))str ="Fascia Max";


    return str;
    }catch(SQLException e){e.printStackTrace(); return "";}
    }
    public int getColumnCount() {
    // metodo che conta le colonne
    try{
    return rsmd.getColumnCount();
    }catch(SQLException e){e.printStackTrace(); return 0;}
    }

    public int getRowCount() {
    //metodo che conta le righe
    try{
    rs.last();
    return rs.getRow();
    }catch(SQLException e){e.printStackTrace();return 0;}
    }

    public Object getValueAt(int r, int c) {
    // metodo che aggiunge l'oggetto alla tabella
    try{
    rs.absolute(r+1);
    return rs.getObject(c+1);
    }catch(SQLException e){e.printStackTrace();return null;}
    }
    private ResultSet rs;
    private ResultSetMetaData rsmd;
    }

  4. #14
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    @fcorsa: Non mi pare una buona idea passare il resulSet alla classe ed usarlo per il metodo getValueAt() per ovvi motivi di persistenza dei dati (se il resultSet viene chiuso perdi i dati e se fai un refresh della tabella ti si svuota). In ogni caso, se vuoi continuare su questa strada, puoi far si che getColumnCount restituisca il valore + 1 e dentro getValueAt, controlli se la colonna e' l'ultima, in caso affermativo restituisci il bottone.

  5. #15
    Grazie basta aggiungere +1 alla conta delle colonne.


    Comunque nel mio caso la tabella viene generata da un clic su un bottone , quindi il rs creato ogni volta. cosi non ce perdita di dati nella tabella per il refresh.

  6. #16
    Ma non so che dire; questo è il mio codice dove ho l'actionListener:

    bottoneCerca.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0)
    {
    pagina=1;
    System.out.println("Pagina: "+pagina);
    connetti.Cerca(testo.getText().trim(), pagina);
    estrai=new EstrazioneCompleta();
    valori=estrai.getMatriceOK();
    result=ComposizioneTabella.getTabellaFinale(valori ,estrai.getNumVideo());
    result.repaint();
    jstabris=new JScrollPane(result);
    jstabris.repaint();
    getContentPane().add(jstabris,BorderLayout.CENTER) ;
    next.setEnabled(true);
    }
    });

    l'ho fatto qui il repain e nella classe che ho messo sopra che costruisce la tabella risultati.

  7. #17
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Non so che dire, a me il repaint funziona solitamente. Prova a chiamarlo su tutto il JFrame ma non credo cambi molto. Altrimenti posta tutte le classi che lo provo sul mio pc,magari vedendolo eseguito capisco dove sta' il problema.

  8. #18
    Ho fatto varie prove e ho visto che se creo un frame condentro le istruzioni senza ActionListener riesce a fare la visualizzazione quando però ci metto l'ActionListener arriva il problema. Ma il render con il suo metodo è chiamatoin modo automatico?

  9. #19
    OK finalmente ci sono riuscito.
    La soluzione è mettere uno show(); nella Frame. Anche se il metodo è deprecato funziona

  10. #20
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Al posto di show di solito si mette setVisible(true). Se ti va anche cosi', quest'ultimo non e' deprecato.
    P.s.Per la domanda del render, si.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.