Selektion von JTable-Einträgen nicht mehr möglich und JProgressbar-Frage

Sacrent

Grünschnabel
Hallo,

ich bin immer noch am fleißigen Basteln meines Uploadtools. Als Nächstes wollte ich eine Liste von Jobs programmieren. Nach einigem Rumprobieren bisher folgendes Ergebnis:

Code:
package classes;

import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.JTable;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.JTextArea;
import javax.swing.table.*;
import javax.swing.SwingConstants;
import java.awt.Component;
import javax.swing.JOptionPane;
import java.awt.BorderLayout;
import java.awt.Dimension;

public class FMList extends JPanel 
{

  private Toolkit toolkit = Toolkit.getDefaultToolkit();
  protected JTable table;

  public FMList() 
  {
    super(new GridLayout(1, 0));

    String[]  columns =      {"Jobs"};
    Integer[] columnWidths = {791};  
    
    class Job 
    {
      protected String[] files;
      protected String[] fpaths;
      protected String dest;
      protected String date;
      protected Integer fcount;
      protected Integer progress1;
      protected Integer progress2;
      
      public Job(Integer progress1, Integer progress2, Integer fcount, String[] files, String[] fpaths, String dest, String date) 
      {
        this.fcount = fcount;
        this.files = files;
        this.fpaths = fpaths;
        this.dest = dest;
        this.date = date;
        this.progress1 = progress1;
        this.progress2 = progress2;
      }

      public String getFile(Integer i) 
      {
        return files[i];
      }

      public String getFPath(Integer i) 
      {
        return fpaths[i];
      }

      public String getDest() 
      {
        return dest;
      }
      
      public String getDate() 
      {
        return date;
      }
      
      public Integer getFCount() 
      {
        return fcount;
      }
      
      public Integer getProgress1()
      {
        return progress1;
      }
      
     public Integer getProgress2()
      {
        return progress2;
      }
    }
    
    class ProgressbarCellRenderer implements TableCellRenderer 
    {
      private JProgressBar progress1;
      private JProgressBar progress2;
      private JPanel panel;
      private JLabel header;
      private JLabel footer;
      
      public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) 
      {          
        Job j = (Job)value;   
        int intValue1 = j.getProgress1();
        int intValue2 = j.getProgress2();
        if (panel == null) 
        {
          GridLayout grid = new GridLayout(4, 1);
          grid.setVgap(2);
          panel = new JPanel(grid);
        }
        if (header == null) 
        {
          header = new JLabel("<html>Download</html>");
        }
        if (footer == null) 
        {
          footer = new JLabel("<html><table><tr><td>Datei 2/5</td><td>Dateiname.txt</td></tr></table></html>");
        }
        if (progress1 == null) 
        {
          progress1 = new JProgressBar();
        }
        if (progress2 == null) 
        {
          progress2 = new JProgressBar();
        }
        progress1.setValue(intValue1);
        progress1.setBackground(table.getBackground());
        progress1.setStringPainted(true);
        progress2.setValue(intValue2);
        progress2.setBackground(table.getBackground());
        progress2.setStringPainted(true);
        panel.add(header);
        panel.add(progress1);
        panel.add(progress2);
        panel.add(footer);
        return panel;
      }
    }
    
    class TableModel extends AbstractTableModel 
    {
      String[] flist1 = {"a", "b", "c"};
      String[] fpaths1 = {"a", "b", "c"};
      private String[] columnNames = {"Jobs"};
      private Object[][] data = {
        {new Job(50, 20, 3, flist1, fpaths1, "z", "20.05.2010")},
        {new Job(33, 10, 3, flist1, fpaths1, "z", "20.05.2010")}
      };

      public int getColumnCount() 
      {
        return columnNames.length;
      }

      public int getRowCount() 
      {
        return data.length;
      }

      public String getColumnName(int col) 
      {
        return columnNames[col];
      }

      public Object getValueAt(int row, int col) 
      {
        return data[row][col];
      }

      public Class getColumnClass(int c) 
      {
        return getValueAt(0, c).getClass();
      }

      public boolean isCellEditable(int row, int col) 
      {
        return false;
      }

      public void setValueAt(Object value, int row, int col) 
      {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
      } 
    }

    table = new JTable(new TableModel());
    JScrollPane scrollPane = new JScrollPane(table);
    add(scrollPane);
    table.setTableHeader(null);
    table.setFillsViewportHeight(true);
    table.setAutoCreateRowSorter(true);
    table.setShowGrid(false);
    table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    table.setDefaultRenderer(Job.class, new ProgressbarCellRenderer()); 
    table.setRowHeight(60); 
    
    TableColumn column = null;
    for (int i = 0; i < 1; i++) {
      column = table.getColumnModel().getColumn(i);
      column.setPreferredWidth(columnWidths[i]);
      column.setMinWidth(columnWidths[i]);
    }

  }

}


Sieht soweit ganz gut aus. Nur kann ich irgendwie die Einträge nicht mehr auswählen. Woran könnte das liegen?

Dass die Progressbars sich den Fortschritt aus der Tabelle holen war nur zum Testen. Dazu meine Frage: Wie kann ich später die entsprechenden Progressbars und zum Beispiel die Label also sowas wie das Label mit "Datei 2/5", das dann auf "Datei 3/5" geändert wird, ansprechen und updaten?


Edit:

Mittlerweile habe ich rausgefunden, dass die Einträge selektiert werden. Habe einfach eine normale zelle daneben gesetzt und wenn ich diese auswähle wird sie blau hinterlegt wies sein soll nur wird meine Spezial-Zelle nicht gefärbt habe auch schon mit setOpaque und setVisible rumprobiert. Gibt es irgendeine Möglichkeit die blaue Hinterlegung auch auf meine Spezial-Zelle zu legen? oder muss ich die Hinterlegung für das JPanel meines Renderers separat programmieren?

Edit 2:

Habe die Idee mit JTable aufgegeben und schaue nun, ob es mit JPanel funktionert. Leider habe ich dort wieder ein Problem. Zu finden hier: http://www.tutorials.de/forum/swing...el-im-flowlayout-zeigt-jscrollpane-nicht.html
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück