domingo, 27 de maio de 2012

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!


Nenhum comentário:

Postar um comentário

Admin: Bruno

Olá Galera! muito grato por estarem acessando nosso blog. Espero que seja possível transmitir de forma compreensível um pouco de meus conhecimentos em programação, para esta comunidade de desenvolvedores que cresce cada vez mais! Espero que Gostem! Abraço! E meu enorme obrigado à Renato Simões, Átila Soares,Wanderson Quinto, Emerson e a toda galera que sempre ajudou meu sincero obrigado....
Especialmente a Natalia Failache e Rita de Cassia que sempre apoiaram este sonho....

De seu amigo Bruno Rafael.