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