terça-feira, 5 de março de 2013

JTable: Como adicionar mensagem de "Não existe registros"

Pessoal! vejam como é simples adicionar uma mensagem de "Não existe(m) Registro(s)" em uma JTable.

Nesse exemplo vamos precisar usar o velho @Override (setinha verde ao lado do numero de linhas no eclipse), para reescrever o metodo paintComponent da JTable.

package com.blogspot.receitastecnologicas;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.table.DefaultTableModel;

public class EmptyMessage extends JFrame {

 /**
  * @receitas tecnologias
  */
 private static final long serialVersionUID = 1L;
 private JTable table;

 public EmptyMessage() {
  this.table = new JTable() {
   public boolean getScrollableTracksViewportHeight() {
    if (getParent() instanceof JViewport)
     return (((JViewport) getParent()).getHeight() > getPreferredSize().height);

    return super.getScrollableTracksViewportHeight();
   }

   /**
    * Metodo Reescrito.. quado a quantidade de linhas na tabela foir 0
    * , será pintado na JTable um icone eu um texto
    * */
   protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (getRowCount() == 0) {// Quando estiver usando o RowSorter
           // lembre-se do getViewRowCount()
     Graphics2D g2d = (Graphics2D) g;
     BufferedImage img = null;
     try {
      img = ImageIO.read(EmptyMessage.class
        .getResourceAsStream("icon.png"));
     } catch (IOException e) {
      System.out
        .println("Não foi possível carregar a imagem.");
     } catch (IllegalArgumentException e) {
      System.out.println("Imagem não encontrada!");
     }
     g.drawImage(img, 30, 30, 260, 160, null);
     g2d.setFont(new Font("Arial", Font.BOLD, 16));

     g2d.setColor(Color.BLACK);

     g2d.drawString("Nada por aqui!!!.", this.getWidth() / 3, 20);// Texto
                     // a
                     // ser
                     // exibido
    }
   }
  };
  this.table.setAutoCreateRowSorter(true);
  this.table.setFillsViewportHeight(true);
  // Quando for utilizar JTable Profissionalmente por favor use
  // AbstractTableModel
  this.table.setModel(new DefaultTableModel(new Object[][] { {
    "Receitas", "Tecnologicas" } }, new String[] { "Title 1",
    "Title 2" }));
  table.setComponentPopupMenu(new TablePopupMenu());
  this.add(new JScrollPane(table));
 }

 /**
  * Popup utilizado para add e remover linhas da table para mostrar o
  * funcionamento do metodo reescrito
  * */
 private class TablePopupMenu extends JPopupMenu {
  private final AbstractAction addAction = new AbstractAction("add") {
   @Override
   public void actionPerformed(ActionEvent e) {
    JTable table = (JTable) getInvoker();
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    model.addRow(new Object[] { "Receitas",
      "Tecnologicas " + model.getRowCount() });
    Rectangle rect = table.getCellRect(model.getRowCount() - 1, 0,
      true);
    table.scrollRectToVisible(rect);
   }
  };
  /** Deleta linha selecionada */
  private final Action deleteAction = new AbstractAction("delete") {
   @Override
   public void actionPerformed(ActionEvent e) {
    JTable table = (JTable) getInvoker();
    DefaultTableModel model = (DefaultTableModel) table.getModel();
    int[] selection = table.getSelectedRows();
    if (selection == null || selection.length <= 0)
     return;
    for (int i = selection.length - 1; i >= 0; i--) {
     model.removeRow(table.convertRowIndexToModel(selection[i]));
    }
   }
  };

  public TablePopupMenu() {
   super();
   add(addAction);
   addSeparator();
   add(deleteAction);
  }

 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  EmptyMessage emptyMessage = new EmptyMessage();
  emptyMessage.setTitle("JTable Empty Message");
  emptyMessage.setLocation(50, 50);
  emptyMessage.setSize(300, 300);
  emptyMessage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  emptyMessage.setVisible(true);

 }

}

Nenhum comentário:

Postar um comentário