AbstractTableModel - Será que é tão difícil assim?

Vamos repassar mais esta!

AbstractTableModel é uma classe abstrata que implementa a interface TableModel. Ela fornece código padrão para disparar TableModelEvents com os métodos fireTableRowsDeleted(), fireTableCellUpdated() e fireTableChanged(). Ela também gerencia todos os TableModelListeners registrados em um EventListenerList.

O método findColumn() procura o índice de uma coluna com um dado nome. Esta pesquisa é feita de modo linear e deve ser sobrescrita para modelos de tabelas enormes.

Três métodos devem ser implementados em subclasses concretas: getRowCount(), getColumnCount() e getValueAt(int row, int column).


1. JTable -> Controla a view da tabela: ordenação de colunas, ordenação das linhas, highlight, tamanho da célula; 
2. TableModel -> Diz que dados serão exibidos na tabela. Quantas linhas e que informação vai em cada coluna. Também pode sugerir o nome da coluna; 
3. TableCellRenderer -> É o componente que o JTable usa para efetivamente desenhar a célula; 
4. TableCellEditor -> É o componente que o JTable usa para editar a célula; 
5. TableColumn -> Contém informações sobre uma coluna. 

Exemplo de implementação:




Descrição:
JTable é um componente usado para exibir dados nas duas formas dimensional e  tabular. O componente é baseado no Modelo - View - Controller arquitetura (MVC).O JTable é um componente GUI e actua como um Ver, e é dependente do modelo de dados. O dados modelo para JTable pode ser qualquer modelo que implementa a interface TableModel de javax . pacote swing.table. O modelo JTable também pode ser estendido de classe AbstractTableModel do pacote javax.swing.table. Esta classe abstrata fornece padrão implementações para a maioria dos métodos na interface TableModel. O modelo de tabela pode armazenar os dados da tabela, sob qualquer forma, Vector, HashTable, ou apenas uma matriz. O TableModel deve implementar o método setValueAt (Object value, int linha, int col) para atualizar corretamente os dados no modelo de dados da célula da tabela e getValueAt (int row, int col) para atualizar corretamente a célula JTable com os dados no modelo de mesa. O JTable deve ser adicionado a uma ScrollPane e não directamente a qualquer componente. O ScrollPane cuida da rolagem da tabela e recebe automaticamente o cabeçalho da tabela, que mostra os nomes das colunas, e coloca-lo em cima da mesa. Os nomes das colunas permanecer visível na parte superior da área de visualização, mesmo que os utilizadores rola para baixo.

O exemplo a seguir mostra como criar uma JTable simples usando um TableModel. O exemplo é para mostrar as informações da máquina na forma tabular. As informações da máquina são armazenadas em um objeto MachineData. A tabela simples modelo de tabela se estende AbstractTableModel e mantém o vetor MachineData. O modelo implementa, getValueAt () e setValueAt () métodos para atualizar o JTable com os dados no modelo de mesa e vice-versa.



//package 



//import statements 
import javax.swing.*
import javax.swing.table.*
import java.util.*
import java.awt.*



/** 
* SimpleTableFrame.java 
* This class shows how to create a simple JTable 
* using table model 
* 
* 
*/ 
public class SimpleTableFrame extends JFrame 
    //JTable table 
    private JTable m_simpleTable; 
    //JTable model 
    private SimpleTableModel m_simpleTableModel; 
     
    /** 
    * Constructor 
    * 
    * @return void 
    * @exception 
    */ 
    public SimpleTableFrame() 
    { 
        super("Simple Table Demo"); 
         
      
        m_simpleTableModel = new SimpleTableModel(getDummyData()); 
         
  
        m_simpleTable = new JTable(m_simpleTableModel); 
         
        
        JScrollPane scrollPane = new JScrollPane(m_simpleTable); 
         
        
        getContentPane().add(scrollPane); 
    } 
     
    /** 
    * getDummyData 
    * generating dummy MachineData object and creating a vector 
    */ 
    private Vector getDummyData() 
    { 
        Vector dummyMacData = new Vector(1010); 
         
        dummyMacData.addElement(new MachineData 
                               (new Integer(100), "Robert", "288.209.140.223", 
                                "Win NT", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                               (new Integer(105), "Rahul", "288.209.140.214", 
                                "Solaris 5", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                               (new Integer(110), "Daina", "288.209.140.220", 
                                "HP UX", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                               (new Integer(106), "Vijay", "288.209.140.215", 
                                "Win NT", "Engineering")); 
        dummyMacData.addElement(new MachineData 
                                (new Integer(302), "Andy", "288.209.142.203", 
                                "Win 98", "Human Resource")); 
        dummyMacData.addElement(new MachineData 
                                (new Integer(504), "Tom", "288.209.141.207", 
                                "Win NT", "Marketing")); 
        dummyMacData.addElement(new MachineData 
                                (new Integer(104), "Bill", "288.209.140.222", 
                                "Win NT", "Engineering")); 
         
        return dummyMacData; 
    } 



    /** 
    * main 
    * main method, starting point 
    */ 
    public static void main(String[] arg) 
    { 
        SimpleTableFrame m = new SimpleTableFrame(); 
         
        m.setVisible(true); 
        m.setSize(new Dimension(600300)); 
        m.validate(); 
    } 
     
    /** 
    * SimpleTableModel.java 
    * This class is the table nodel 
    * 
    * @author Rahul Sapkal(rahul@javareference.com) 
    */ 
    public class SimpleTableModel extends AbstractTableModel 
    { 
         
        public static final int    MAC_CODE_COL = 0;                                    
        public static final int    MAC_NAME_COL = 1
        public static final int    IP_COL = 2
        public static final int    OS_COL = 3;   
        public static final int    DOMAIN_COL = 4
         
         
        public String[] m_colNames = {"Machine Code", 
                                      "Machine Name", 
                                      "IP Address", 
                                      "Operating System", 
                                      "Domain"}; 
         
        public Class[]  m_colTypes = {Integer.class, 
                                      String.class,  
                                      String.class, 
                                      String.class, 
                                      String.class}; 
         
         
        Vector m_macDataVector; 
         
        /** 
        * Constructor 
        */ 
        public SimpleTableModel(Vector macDataVector) 
        { 
            super(); 
             
            //store the data 
            m_macDataVector = macDataVector; 
        } 




        public int getColumnCount() 
        {   
            return m_colNames.length; 
        } 
         
        /** 
* getRowCount 
* conta o numero de linhas 
*/ 
        public int getRowCount()     
        {   
            return m_macDataVector.size(); 
        } 
         
         
        /** 
* setValueAt 
* esta função atualiza os dados da tabela
*/ 
        public void setValueAt(Object value, int row, int col)  
        {     
            MachineData macData = (MachineData)(m_macDataVector.elementAt(row)); 
             
            switch(col) 
            { 
            case MAC_CODE_COL : macData.setMacCode((Integer) value); 
                                break; 
            case MAC_NAME_COL : macData.setMacName((String) value); 
                                break; 
            case IP_COL : macData.setMacIP((String) value); 
                          break; 
            case OS_COL : macData.setMacOS((String) value); 
                          break; 
            case DOMAIN_COL : macData.setMacDomain((String) value); 
                              break; 
            } 
        } 



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



        public Class getColumnClass(int col)  
        { 
            return m_colTypes[col]; 
        } 



        /** 
* getValueAt 
* Esta função atualiza a tabela
*/ 
        public Object getValueAt(int row, int col) 
        { 
            MachineData macData = (MachineData)(m_macDataVector.elementAt(row)); 
             
            switch(col) 
            { 
            case MAC_CODE_COL : return macData.getMacCode(); 
            case MAC_NAME_COL : return macData.getMacName(); 
            case IP_COL : return macData.getMacIP(); 
            case OS_COL : return macData.getMacOS(); 
            case DOMAIN_COL : return macData.getMacDomain(); 
            } 



            return new String(); 
        } 
    } 
     
   
    public class MachineData    { 
        private Integer m_macCode; 
        private String m_macName; 
        private String m_macIP; 
        private String m_macOS; 
        private String m_macDomain; 
         
        public MachineData() 
        { 
        } 



        public MachineData(Integer macCode, String macName, 
                           String macIP, String macOS, 
                           String macDomain) 
        { 
            m_macCode = macCode; 
            m_macName = macName; 
            m_macIP = macIP; 
            m_macOS = macOS; 
            m_macDomain = macDomain; 
        } 
         
        public Integer getMacCode() 
        { 
            return m_macCode; 
        } 
         
        public String getMacName() 
        { 
            return m_macName; 
        } 
         
        public String getMacIP() 
        { 
            return m_macIP; 
        } 
         
        public String getMacOS() 
        { 
            return m_macOS; 
        } 
         
        public String getMacDomain() 
        { 
            return m_macDomain; 
        } 
         
        public void setMacCode(Integer macCode) 
        { 
            m_macCode = macCode; 
        } 
         
        public void setMacName(String macName) 
        { 
            m_macName = macName; 
        } 
         
        public void setMacIP(String macIP) 
        { 
            m_macIP = macIP; 
        } 
         
        public void setMacOS(String macOS) 
        { 
            m_macOS = macOS; 
        } 
         
        public void setMacDomain(String macDomain) 
        { 
            m_macDomain = macDomain; 
        } 
    }    
}

Espero que tenham gostado! Abraços!


Comentários

Postagens mais visitadas deste blog

E Esse Tal de Nano Service?

Executar Audio em Java Swing

Validando Email em Java Com e Sem expressão Regular