Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Problema con JTabel

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3

    Problema con JTabel

    Salve ragazzi, ho un problema.. non riesco a far funzionare una JProgressBar all'interno di una cella di JTabel... la tabella visualizza la JProgressBar ma scorre solo quando ci clicco sopra.. vi spiego a grandi linee come ho fatto:

    //Creo la tabella associandovi il modello che implemento..
    String[] colonne = {"Nome File","Progresso"};
    Object[][] dati = new Objec[100][2];
    Modello mod = new Modello(dati,colonne);
    JTable tabella = new JTabella(mod);

    //Modello:
    public class Modello extends AbstractTableModel {

    private String[] colonne;
    private Object[][] dati;
    public ModTrasf(Object[][] dati, String[] colonne) {
    super();
    this.dati = dati;
    this.colonne = colonne;

    }
    //Il numero di righe
    public int getRowCount(){
    return dati.length; }
    //Il numero di colonne
    public int getColumnCount()
    { return colonne.length; }
    //La posizione data la riga e la colonna
    public Object getValueAt(int table_row, int table_column){
    return dati[table_row][table_column];
    }
    //Il nome delle colonne
    public String getColumnName(int column){
    return colonne[column];
    }
    public void setValueAt(Object aValue, int row, int column) {
    dati[row][column] = aValue;
    }

    dopo di che tramite un'altra JTable, cliccando su una riga di ques'ultima interisco una nuova riga nella nuova tabella :
    ....
    MouseListener mouseListener = new MouseAdapter() {
    public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 2) {
    String nomeRicerca = (String)tabCerca.getValueAt(index,0); String[] colonne = {"Nome File","Progresso",
    dati[conta][0] = nomeRicerca;
    ProgressBarDemo c = new ProgressBarDemo(0,100);
    dati[conta][1] = c;
    Modello modTrasf = new Modello(dati,colonne);//
    tabella.setModel(modTrasf);
    tabella.getColumn("Progresso").setCellRenderer(new PanelRenderer());

    }
    }

    };

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3
    Dove la classe ProgressBarDemo è la seguente:
    public class ProgressBarDemo extends JProgressBar implements PropertyChangeListener {

    private Task task;

    class Task extends SwingWorker<Void, Void> {

    public Void doInBackground() {
    int progress = 0;
    setProgress(0);
    while (progress < 100) {
    try {
    Thread.sleep(300);
    } catch (InterruptedException ignore) {}
    progress += 10;

    setProgress(Math.min(progress, 100));
    }
    return null;
    }


    public void done() {
    //FINITO
    Toolkit.getDefaultToolkit().beep();
    setCursor(null);
    }
    }

    public ProgressBarDemo(int i,int j) {
    super(i,j);

    task = new Task();
    task.addPropertyChangeListener(this);
    task.execute();

    }
    public void propertyChange(PropertyChangeEvent evt) {
    if ("progress" == evt.getPropertyName()) {
    int progress = (Integer) evt.getNewValue();
    setValue(progress);
    setStringPainted(true);

    }

    }
    }

    Spero di essere stata chiara...


    aiutoo..

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    3
    Ho risolto finalmente .. vi faccio vedere come ho risolto, in futuro potrà servire a qualcun'altro..

    //Classe originaria che estende JFrame
    //Creo la tabella associandovi il modello..
    String[] colonne = {"Nome File","Progresso","Dimensione"};
    Object[][] dati = new Objec[100][2];
    Modello mod = new Modello(dati,colonne);
    JTable tabella = new JTabella(mod);

    ...

    //Aggiungo le righe alla tabella prendendo alcune informazioni su un'altra tabella tabCerca ed aggiungo alla tabella una ProgressBarDemo che estende la JProgressBar.
    String nomeRicerca = (String)tabCerca.getValueAt(index,0);
    Integer dim = (Integer)tabCerca.getValueAt(index,2);
    String[] colonne = {"Nome File","Progresso","Dimensione"}
    dati[conta][0] = nomeRicerca;
    dati[conta][2] = dim;
    int dimensione = dim.intValue();
    ProgressBarDemo c = new ProgressBarDemo(0,100,dimensione);
    dati[conta][1] = c;
    ModTrasf modTrasf = new ModTrasf(dati,colonne);
    tabella.setModel(modTrasf);
    tabella.getColumn("Progresso").setCellRenderer(new ProgressBarDemo(0,100,dimensione));
    tabella.setRowHeight(30);
    conta++;

    ....

    //Nella stessa Classe:
    public class ProgressBarDemo extends JProgressBar implements PropertyChangeListener,TableCellRenderer {
    private TaskProgressBar task;
    public ProgressBarDemo(int i,int j,int dimensione) {
    super(i,j);
    task = new TaskProgressBar(dimensione);
    task.addPropertyChangeListener(this);
    task.execute();
    }
    public void propertyChange(PropertyChangeEvent evt) {
    if ("progress" == evt.getPropertyName()) {
    int progress = (Integer) evt.getNewValue();
    setValue(progress);
    setStringPainted(true);
    }
    }
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column){
    return (JProgressBar)value;
    }
    public void repaint() {
    tabella.repaint();
    }
    }


    //Creo un'altra classe per estendere AbstractTableModel
    public class Modello extends AbstractTableModel {

    private String[] colonne;
    private Object[][] dati;
    public ModTrasf(Object[][] dati, String[] colonne) {
    super();
    this.dati = dati;
    this.colonne = colonne;
    }
    //restituisce il numero di righe
    public int getRowCount(){
    return dati.length; }
    //restituisce il numero di colonne
    public int getColumnCount()
    { return colonne.length; }
    //restituisce la posizione data la riga e la colonna
    public Object getValueAt(int table_row, int table_column){
    return dati[table_row][table_column];
    }
    //restituisce Il nome delle colonne
    public String getColumnName(int column){
    return colonne[column];
    }
    public void setValueAt(Object aValue, int row, int column) {
    dati[row][column] = aValue;
    }
    }

    public class TaskProgressBar extends SwingWorker<Void, Void> {
    public int progress = 0;
    public int dim;
    public int conta;
    public TaskProgressBar(int dim){
    this.dim = dim;
    }
    public Void doInBackground() {
    if(dim == 0) conta = 99;
    else {
    conta = dim/1024;
    conta = (100/conta)+10;
    }
    setProgress(0);
    while (progress < 100) {
    try {
    Thread.sleep(300);
    } catch (InterruptedException ignore) {}
    progress += conta;
    setProgress(Math.min(progress, 100));
    }
    return null;
    }
    public void done() {
    //FINITO
    Toolkit.getDefaultToolkit().beep();
    //setCursor(null);
    }
    }
    Grazie lo stesso

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.