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