alguem sabe como criar um Image de uma JTable ?
preciso de um Image de uma JTable pra coloca-la no relatório…
Image de JTable
6 Respostas
Como assim Image de uma JTable?
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);
}
}
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. 
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! 
valeu! até mais…
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.
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 !!!