Java Tips: Operações com JTable parte 3

Posted on dezembro 18, 2012. Filed under: Java, Tips | Tags:, |

Introdução

Vamos mostrar mais algumas dicas interessantes da class JTable do Java. Outras dicas do JTable podem ser encontradas nos posts anteriores:

Java Tips: Operações com JTable parte 1
Java Tips: Operações com JTable parte 2

  1. Manipulando o conteúdo da tabela
  2. 
    // inserindo dados em uma tabela com 4 colunas
    DefaultTableModel tableModel = (DefaultTableModel) minhaTabela.getModel();
    tableModel.insertRow(tableModel.getRowCount(), new Object[]{ "Douglas", "Villanacci", "douglas.pasqua@gmail.com", "11111111"});
    tableModel.insertRow(tableModel.getRowCount(), new Object[]{ "Fulano", "da Silva", "fulano.silva@blalbla.com", "11111111"});
    
    // limpando todo o conteúdo da tabela
    DefaultTableModel tableModel = (DefaultTableModel) minhaTabela.getModel();
    tableModel.getDataVector().removeAllElements();
    minhaTabela.updateUI();
    
    // alterando o valor de determinada linha e coluna da tabela: Linha (1), Coluna (1)
    // linha e coluna começam com valor 0
    TableModel model = (TableModel) minhaTabela.getModel();
    model.setValueAt("Josefina", 0, 0);
    
    // obtendo valor de determinado campo na tabela, informando Linha(2) e Coluna(1)
    // linha e coluna começam com valor 0
    TableModel model = (TableModel) minhaTabela.getModel();
    String value = (String) model.getValueAt(1, 0);
    System.out.println(value);
    
  3. Tratando evento de mudança de dados na tabela
  4. Caso você tenha campos editáveis na sua tabela, você pode em algum momento querer executar alguma ação quando um valor de um campo da sua tabela sofrer alterações.

    Para que você possa controlar as mudanças realizadas na edição da sua tabela, é necessário monitorar o evento de alteração através do listener TableModelListener.

    // monitorando o evento através de TableModelListener
    minhaTabela.getModel().addTableModelListener(new TableModelListener() {
        @Override
        public void tableChanged(TableModelEvent e) {
            int linha = e.getFirstRow();
            int coluna = e.getColumn();
    
            TableModel model = (TableModel) e.getSource();
    
            System.out.println("Você alterou a linha " + linha + ", coluna " + coluna);
            System.out.println("Valor da célula alterada: " + model.getValueAt(linha, coluna));
        }
    });
    
  5. Usando ComboBox (JcomboBox) nas células da sua tabela
  6. É possível associar um JComboBox (caixa de seleção) à uma coluna da sua tabela. É uma forma de facilitar a vida do usuário. Ao invés do usuário digitar um valor para a célula, ele simplesmente escolhe um valor dentre vários, através de uma caixa de seleção. Recurso bem interessante e elegante.

    No exemplo abaixo, vamos associar um combo box para a quinta coluna da tabela. (Lembre-se que a numeração das colunas começa por 0). O usuário poderá escolher entre “Masculino” ou “Feminino”:

    // Obtendo à referencia para a 5 coluna da tabela
    TableColumn column = minhaTabela.getColumnModel().getColumn(4);
    // Criando o ComboBox
    JComboBox comboSexo = new JComboBox();
    // Definindo os valores para o ComboBox
    DefaultComboBoxModel comboModel = new DefaultComboBoxModel(new String[] { "Masculino", "Feminino" });
    comboSexo.setModel(comboModel);
    // Associando o ComboBox para a coluna
    column.setCellEditor(new DefaultCellEditor(comboSexo));
    

    Veja ilustração:

    ScreenShot026

Ler Post Completo | Make a Comment ( None so far )

Java Tips: Operações com JTable parte 2

Posted on maio 24, 2012. Filed under: Java, Tips | Tags:, |

Introdução

Neste artigo teremos mais alguns exemplos de manipulação de tabelas do JTable do Java. Já abordamos o JTable em um artigo anterior. Portanto, este artigo serve como complemento ao anterior.

  • Bloqueando a seleção de linhas/colunas baseado em uma determinada condição.
  • int linhas = 10;
    int colunas = 3;
    JTable table = new JTable(linhas, colunas) {
    	public void changeSelection(int row, int column, boolean toggle, boolean extend) {
    		DefaultTableModel m = (DefaultTableModel) getModel();
    	
            /* não permite a seleção da linha quando o valor da coluna 3 for igual fechado */
    		if (m.getValueAt(row, 2) != null && m.getValueAt(row, 2).toString().toLowerCase().equals("fechado")) {
    	    	return;
    	    }
    		super.changeSelection(row, column, toggle, extend);
    	}
    };
    
  • Alterando o cor de fundo/primeiro plano de acordo com uma determinada condição.
  • Determina também a cor de fundo/primeiro plano da linha selecionada. Você esta livre para inserir outras lógicas que achar necessário além desse exemplo básico que verifica somente o valor de uma determinada coluna.

    int linhas = 5;
    int colunas = 3;
    JTable table = new JTable(linhas, colunas) {
        public Component prepareRenderer(TableCellRenderer renderer,
                int rowIndex, int vColIndex) {
    		
        	DefaultTableModel m = (DefaultTableModel) getModel();
        	Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
        	
        	// altera a cor de background da linha para vermelho e foreground para branco
        	// quando o valor da coluna 3 for igual a fechado 
        	if (m.getValueAt(rowIndex, 2).toString().toLowerCase().equals("fechado")) {
        		c.setBackground(new Color(192, 0, 0));
        		c.setForeground(Color.white);
            } else {
            	// mantem a cor padrão de foreground 
            	c.setForeground(getForeground());
            	
            	// determina a cor de background da linha selecionada 
            	if(isCellSelected(rowIndex, vColIndex)) {
            		c.setBackground(new Color(184, 207, 229));
            	} else {
            		// linhas não selecionadas, manter cor de background padrão 
            		c.setBackground(getBackground());
            	}
    
            }			
    		return c;
        }
    };
    

    Exemplo de visualização:

  • Forçar a renderização do JTable
  • O código abaixo pode ser utilizado para renderizar o JTable novamente quando for preciso. No caso de mudança de dados que influencie na lógica usada em algum dos métodos anteriores.

       
    table.updateUI();     
    

Mais dicas

Java Tips: Operações com JTable parte 1
Java Tips: Operações com JTable parte 3

Ler Post Completo | Make a Comment ( 1 so far )

Java Tips: Operações com JTable

Posted on fevereiro 4, 2012. Filed under: Java, Tips | Tags:, , , |

Neste artigo reuni algumas operações úteis realizadas com o componente JTable do Java. Vamos à elas:

  • Instanciando um JTable, já inserindo dentro de um JScroll, que desabilita o usuário poder editar suas células:
int linhas = 10;
int colunas = 2;
JTable table = new JTable(linhas, colunas) {
    public boolean isCellEditable(int rowIndex, int vColIndex) {
             return false;
    }
};
JScrollPane scrollPane = new JScrollPane(table);
  • Bloqueia o usuário de redimensionar as colunas da tabela:
table.getTableHeader().setResizingAllowed(false);
  • Bloqueia o usuário de trocar a posição das colunas via drap and drop.
table.getTableHeader().setReorderingAllowed(false);
  • Alterando o nome das duas primeiras colunas da tabela dinâmicamente:
table.getColumnModel().getColumn(0).setHeaderValue("Coluna 1");
table.getColumnModel().getColumn(1).setHeaderValue("Coluna 2");
  • Definindo um tamanho fixo para largura das duas primeiras colunas:
table.getColumnModel().getColumn(0).setPreferredWidth(115);
table.getColumnModel().getColumn(1).setPreferredWidth(661);
  • Desativando o auto redimensionamento da tabela:
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  • Permite apenas seleção simples (somente 1 linha):
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  • Tratando evento de dois clicks do mouse em cima de uma linha da abela:
table.addMouseListener(new MouseAdapter() {
	   public void mouseClicked(MouseEvent e) {
	       if (e.getClickCount() == 2) {
	           JTable target = (JTable)e.getSource();
	           int linha = target.getSelectedRow(); // linha selecionada
	           int coluna = target.getSelectedColumn(); // coluna selecionada

	           System.out.println("Linha: " + linha);
	           System.out.println("Coluna: " + coluna);
	       }
	   } 
});

Espero que essas dicas possam ajudar você de alguma forma. Todas elas foram úteis para mim em algum momento, portanto achei importante compartilhar.

Mais dicas

Java Tips: Operações com JTable parte 2
Java Tips: Operações com JTable parte 3

Ler Post Completo | Make a Comment ( None so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: