Image de JTable

6 respostas
keller

alguem sabe como criar um Image de uma JTable ?
preciso de um Image de uma JTable pra coloca-la no relatório…

6 Respostas

hmichel

Como assim Image de uma JTable?

Sami_Koivu

Oi gui,

Não é que eu sei como fazer aquilo… isso é só uma ideia que passou pela minha cabeçinha. Decidi experimentar, e parece funcionar - mais ou menos.

É uma programazinha bem feia, sem OO ou nada, só pra demonstrar a ideia.

Cria dois JFrames e numa coloca uma JTable(que só contém números) é um botão nele. No outro JFrame, coloca um JLabel.

Quando você clique no botão cria um BufferedImage(que é um subclasse de Image), pega o Graphics2D do BufferedImage e manda a JTable se desenhar nele usando o metodo void paint(Graphics) da JTable. E então, pega o BufferedImage, coloca ele num ImageIcon e seta como a imagem do JLabel.

Parece funcionar ok. Testei com java1.4.2_01

Desculpas pelo meu português péssima - espero que dá pra entender.

-Sami

package examples;

import javax.swing.JTable;
import javax.swing.JFrame;
import javax.swing.table.DefaultTableModel;
import javax.swing.JButton;
import java.awt.image.BufferedImage;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Graphics2D;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.BorderLayout;

public class Imagenizer extends JTable {
  
  public Imagenizer() {
    super(new DefaultTableModel() {
      public int getRowCount() {
        return 10;
      }
      
      public int getColumnCount() {
        return 10;
      }
      
      public Object getValueAt(int r, int c) {
        return String.valueOf(r * c);
      }
    });

  }
  
  public static void main(String[] args) {
    final Imagenizer tabela = new Imagenizer();
    final JFrame frame = new JFrame();
    final JFrame frame2 = new JFrame();
    final JLabel label = new JLabel();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame2.getContentPane().add(label);
    frame2.setVisible(true);
    frame.getContentPane().add(tabela, BorderLayout.CENTER);
    JButton b = new JButton("criar Image");
    b.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        BufferedImage bi = new BufferedImage(tabela.getWidth(), tabela.getHeight(), BufferedImage.TYPE_INT_RGB);
        Graphics2D g = bi.createGraphics();
        tabela.paint(g);
        label.setIcon(new ImageIcon(bi));
        frame2.pack();
      }

    });
    frame.getContentPane().add(b, BorderLayout.NORTH);
    frame.setVisible(true);
    frame.pack();
    frame2.setSize(200, 200);
  }

}
keller

hmichel:
bom o problema todo está no iReport eu preciso desenhar uma tabela nele…
entao tenho que passar a JTable mas nao estou conseguindo…
no iReport ele recebe java.awt.Image;
por isso preciso fazer um Image de uma JTable…

Sami Koivu:
dá pra entender sim o seu portugues, e obrigado pela resposta, vou tentar amanha no trabalho, muito obrigado. :wink:

keller

consegui! com o codigo que a Sami Koivu enviou consegui fazer uma Image de minha JTable!

no iReport criei uma Area de Imagem com o ImageTool recebendo java.awt.Image;

passei o BufferedImage como paramatro em um Hashmap e tcharam! :lol:
lá está a minha JTable!

*novamente após uma noite de sono…
** OBRIGADO Sami Koivu! :wink:

valeu! até mais…

keller

Apenas uma dica pro pessoal que for utilizar o codigo…

tabela.setDoubleBuffered(false);

BufferedImage
bufferedImage 		=	new	BufferedImage(	tabela.getWidth(),
							tabela.getHeight(),
							BufferedImage.TYPE_BYTE_GRAY
							);

na hora da impressao obtive um melhor resultado

  • impressora matricial. :smiley:
G

Eo seguinte consegui buscar todos os registros da tabela do BD, e inserir no JTable…
atraves desse codigo…

try {

Vector vetor = new Vector();

       taxas.setMatricula(Integer.valueOf(txtMatricula.getText()));

       vetor = ctrltaxas.consultarPagAlunos(taxas);

       if (vetor.size() > 0) {

           limparGrid();

           for (int linha = 0; vetor.size() > linha; linha++) {

               taxas = (Taxas) vetor.elementAt(linha);

               Vector vetaluno = new Vector();

               vetaluno = ctrlaluno.consultarMatAluno(taxas.getMatricula());
               aluno = (Aluno) vetaluno.elementAt(0);

               tblPagAlunos.setValueAt(taxas.getNumDocument(), linha, 0);
               tblPagAlunos.setValueAt(taxas.getMatricula(), linha, 1);
               tblPagAlunos.setValueAt(aluno.getNome(), linha, 2);
               tblPagAlunos.setValueAt(taxas.getValorMens(), linha, 3);
               tblPagAlunos.setValueAt(taxas.getDtPagamento(), linha, 4);
               tblPagAlunos.setValueAt(taxas.getControle(), linha, 5);
               
               lblTitulo.setText(aluno.getNome());
               
           }//for..

       }//if..

…mas tem um problema , gostaria de ajustar a quantidade de linhas do JTable de acordo com a quantidade de registros, nao sei qual o “método” para fazer isso…alguem poderia me ajudar…?

Abraços Gustavo !!!

Criado 29 de novembro de 2004
Ultima resposta 1 de out. de 2008
Respostas 6
Participantes 4