Erro ao inserir o JTable

10 respostas
Antonio_Ishac

Olá pessoal, estou tentando inserir um JTable num JInternalFrame, mas não estou tendo sucesso, a única coisa que aparece na tela é uma linha da JTable em branco, o engraçado que não aparece os titulos das colunas, com certeza é alguma coisa errada, já rodei e revirei e tentei fazer de várias formas mas não obtive sucesso.

Vou postar o código abaixo para vcs estarem olhando:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.BorderFactory;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JInternalFrame;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


public class MovEntradaItens extends JInternalFrame implements ActionListener, KeyListener{
	
	private static final long serialVersionUID = 1L;
	//private boolean DEBUG = false;
	
	JInternalFrame MovEntrada = new JInternalFrame("Movimento Entrada",true, true, true, true);
	
	private String status = "";
	
	public String getStatus(){
		return status;
	}
	
	//CRIANDO O PAINEL PARA INSERIR OS OBJETOS.
	JPanel pl = new JPanel();
	
	//CRIANDO OS OBJETOS.
	JLabel lblCodigo = new JLabel("Código:");
	JTextField txtCodigo = new JTextField();
	
	JLabel lblData = new JLabel("Data:");
	JTextField txtData = new JTextField();
	
	JLabel lblFornecedor = new JLabel("Fornecedor:");
	JTextField txtFornecedor = new JTextField();
	
	JLabel lblValorTotal = new JLabel("Valor Total:");
	JTextField txtValorTotal = new JTextField();	
	
	JLabel lblCodigoDoProduto = new JLabel("Cod. Produto:");
	JTextField txtCodigoDoProduto = new JTextField();
	
	JLabel lblDescricao = new JLabel("Descrição:");
	JTextField txtDescricao = new JTextField();
	
	JLabel lblCpmf = new JLabel("C.P.M.F:");
	JTextField txtCpmf = new JTextField();
	
	JLabel lblIpi = new JLabel("I.P.I:");
	JTextField txtIpi = new JTextField();
	
	JLabel lblQtd = new JLabel("QTD:");
	JTextField txtQtd = new JTextField();
	
	JLabel lblValorCompra = new JLabel("Valor Compra:");
	JTextField txtValorCompra = new JTextField();
	
	//BOTÃO PARA INSERIR OS DADOS NO JTABLE.
	JButton cmdAdd = new JButton(">>");
	
	//INSERINDO O JTABLE		
	String[] colunas = {"Cód.produto", "Descrição", "I.P.I", "CPMF", "QTD", "Valor"};
	
	Object[][] data = {{txtCodigo.getText(), txtDescricao.getText(),
						txtIpi.getText(), txtCpmf.getText(), 
						txtQtd.getText(), txtValorCompra.getText()}
	};
	
	final JTable table = new JTable(data, colunas);
	
	
	
	public void criaTela(){
		pl.setBorder(BorderFactory.createTitledBorder("Movimento Entrada"));
		
		lblCodigo.setBounds(10,30,90,20);
		txtCodigo.setBounds(60,30,70,20);
		
		lblData.setBounds(140,30,90,20);
		txtData.setBounds(175,30,120,20);
		
		lblFornecedor.setBounds(305,30,90,20);
		txtFornecedor.setBounds(380,30,120,20);
		
		lblValorTotal.setBounds(685, 10, 90, 20);
		txtValorTotal.setBounds(680, 30, 80, 40);
		txtValorTotal.setEditable(false);
		lblValorTotal.setBackground(Color.BLUE);
		
		lblCodigoDoProduto.setBounds(10, 90, 100, 20);
		txtCodigoDoProduto.setBounds(10, 110, 150, 20);
		
		lblDescricao.setBounds(165, 90, 100, 20);
		txtDescricao.setBounds(165, 110, 280, 20);
		
		lblIpi.setBounds(450, 90, 100, 20);
		txtIpi.setBounds(450, 110, 30, 20);
		
		lblCpmf.setBounds(485, 90, 100, 20);
		txtCpmf.setBounds(485, 110, 50, 20);
		
		lblQtd.setBounds(540, 90, 100, 20);
		txtQtd.setBounds(540, 110, 50, 20);
		
		lblValorCompra.setBounds(595, 90, 100, 20);
		txtValorCompra.setBounds(595, 110, 100, 20);
		
		new GridLayout(1,0);
		table.setPreferredScrollableViewportSize(new Dimension(500,70));
		JScrollPane scrollPane = new JScrollPane(table);        
        add(scrollPane);
        table.setBounds(10, 300, 500, 70);
		
		
		//BOTÕES
		cmdAdd.setBounds(700, 110, 50, 20);
		
					
		//ADICIONANDO OS COMPONENTES NO PAINEL.
		pl.add(lblCodigo);
		pl.add(txtCodigo);
		pl.add(lblData);
		pl.add(txtData);
		pl.add(lblFornecedor);
		pl.add(txtFornecedor);
		pl.add(lblValorTotal);
		pl.add(txtValorTotal);
		pl.add(lblCodigoDoProduto);
		pl.add(txtCodigoDoProduto);
		pl.add(lblDescricao);
		pl.add(txtDescricao);
		pl.add(lblIpi);
		pl.add(txtIpi);
		pl.add(lblCpmf);
		pl.add(txtCpmf);
		pl.add(lblQtd);
		pl.add(txtQtd);
		pl.add(lblValorCompra);
		pl.add(txtValorCompra);
		pl.add(cmdAdd);
		pl.add(table);
		
		
		MovEntrada.setBounds(05,10,780,530);
		pl.setLayout(null);
		pl.setBackground(Color.white);
		
		//ADICIONA O PAINEL NO FRAME.
		MovEntrada.getContentPane().add(pl);
		
		MovEntrada.setVisible(true);
		Mdi.desktop.add(MovEntrada);
	}

	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void keyPressed(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}
}

OBS: - No meu conceito, estou declarando uma tabela, coloco as colunas, os dados que irão conter “data”.

Não sei o que está errado, peço a compreenção de todos mais uma vez.
Por favor me ajudem
:smiley: :smiley: :smiley:

10 Respostas

D

Exemplo de Jtable funcionando e testado.... só implementar no JInternal frame

import java.awt.BorderLayout;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
   
   
 public class MovEntradaItens extends JFrame {

	private final JPanel panel = new JPanel();
	private final JTable table = new JTable();
	private final JScrollPane scroll = new JScrollPane(table);
	private final DefaultTableModel model = new DefaultTableModel() {
		public boolean isCellEditable(int row, int column) {
			return false;
		}
	};

	public MovEntradaItens() {
		super("Jtable teste");
		super.setSize(800, 600);
		super.setResizable(false);

		super.setLayout(new BorderLayout());

		super.add(panel);

		panel.setLayout(null);
		panel.add( scroll );
		
		scroll.setBounds(100, 100, 600, 400);

		table.setAutoCreateRowSorter(true);//Ativa o ordenador
		table.setModel(model);
		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);// não deixa que as cols do table seja redimencionado auto
		table.getTableHeader().setReorderingAllowed(false); //bloqueia a movimentação das culunas
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		
		model.addColumn("Cód.produto");
			table.getColumnModel().getColumn(0).setPreferredWidth(50);
		model.addColumn("Descrição");
			table.getColumnModel().getColumn(1).setPreferredWidth(50);
		model.addColumn("I.P.I");
			table.getColumnModel().getColumn(2).setPreferredWidth(50);
		model.addColumn("CPMF");
			table.getColumnModel().getColumn(3).setPreferredWidth(50);
		model.addColumn("QTD");
			table.getColumnModel().getColumn(4).setPreferredWidth(50);
		model.addColumn("Valor");
			table.getColumnModel().getColumn(5).setPreferredWidth(50);
		
		Vector<Object> vector = new Vector<Object>();
		
		vector.add("001");
		vector.add("Produto 1");
		vector.add(100.00);
		vector.add(25.00);
		vector.add(324);
		vector.add(125.39);
		
		model.addRow(vector);
		
		vector = new Vector<Object>();
		
		vector.add("002");
		vector.add("Produto 2");
		vector.add(100.00);
		vector.add(25.00);
		vector.add(324);
		vector.add(125.39);
		
		model.addRow(vector);
	}

	public static void main(String[] args) {
		new MovEntradaItens().setVisible(true);
	}

}
Antonio_Ishac

Olá amigos infelizmente não funcionou dentro do JInternalFrame.

Será que alguém poderia ajudar como posso implementar minha idéia.

Obrigado a todos.
:smiley: :smiley: :smiley:

ViniGodoy
  1. Não adicione sua Table diretamente no painel. Adicione-a num JScrollPane e o JScrollPane no painel. Sem isso nem o cabeçalho e nem as barras de rolagem aparecem;
  2. Procure aprender sobre gerenciadores de layout e pare de usar o setBounds. Caso contrário, sua tela não poderá ser redimensionada e ficará muito errada se rodada em outro SO ou look&feel.
Antonio_Ishac

Olá Amigo muito obrigado em me ajudar.

Veja só eu coloquei assim e não deu certo:

Criando o JTable e colunas.

//INSERINDO O JTABLE		
	String[] colunas = {"Cód.produto", "Descrição", "I.P.I", "CPMF", "QTD", "Valor"};
	
	Object[][] data = {{txtCodigo.getText(), txtDescricao.getText(),
						txtIpi.getText(), txtCpmf.getText(), 
						txtQtd.getText(), txtValorCompra.getText()}
	};
                final JTable table = new JTable(data, colunas);

Agora dentro do criaTela:

public void criaTela(){
        new GridLayout(1,0);
        table.setPreferredScrollableViewportSize(new Dimension(500,70));
        
        //Adicionando a table no JScrollPane, como foi no forum.
        JScrollPane scrollPane = new JScrollPane(table);

        //Adicionando o painel na tela.
        pl.add(scrollPane);

Então pelo que eu entendi como foi dito no forum, seria deste jeito, mas ainda não funcionou.

Peço por favor que algém me ajude.
:slight_smile: :slight_smile: :slight_smile:

Antonio_Ishac

Olá Pessoal não estou conseguindo fazer o JTable aparecer na tela, por favor me ajudem.

Conto com a colaboração de vcs.
:slight_smile: :slight_smile: :slight_smile:

M

Opa, beleeza?Para que você precisa colocar um jinternalframe dentro de outro jinternalframe!??

Antonio_Ishac

Olá Amigos segui os conselhos acima mas ainda não obtive resultado, não consegui que meu JTable apareça na tela.

Peço mais uma vez a ajuda de todos, é muito importante para mim conseguir.
Obrigado pela atenção de todos.

:smiley: :smiley: :smiley:

M
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class InternaTable extends JFrame {
		JTable tabela; 
		JInternalFrame interno;
		String[] colunas= {"ID", "NOME", "TEL"};
		String [][] dados={{"1", "FULANO DE TAL", "44444444"}};
    public InternaTable() {
    	super("Tabela Dentro jInternal");
    	setLayout(new FlowLayout());
    	interno = new JInternalFrame("Janela Interna", true, true, true, true);
    	interno.setVisible(true);
    	tabela = new JTable(dados, colunas);
    	getContentPane().add(interno);
    	interno.add(new JDesktopPane().add(new JScrollPane(tabela)));
    	setDefaultCloseOperation(EXIT_ON_CLOSE);
    	pack();
    	setLocationRelativeTo(null);
    	setVisible(true);
    	
    	
    }
    
    public static void main(String args[]){
    	SwingUtilities.invokeLater(new Runnable(){
    		public void run(){
    			new InternaTable();
    		}
    	});
    }
    
    
}
Bem, no meu código, sem problemas!!
Antonio_Ishac

Olá amigo, muito, mas muito obrigado mesmo pela ajuda, apareceu o JTable na tela tudo certinho.

Mas tô com o seguinte problema agora:

Está tela que eu estou chamando fica dentro de um JDesktopPane, como posso implementar essa tabela para ser chamada dentro de um aplicativo MDI.

Se possivel peço mas um pouco a ajuda de vcs todos, estou quase lá.

Muito obrigado pela ateção.
:smiley: :smiley: :smiley:

Antonio_Ishac

Olá amigos, Já consegui resolver meu problema.

Obrigado a todos pela ajuda.

Criado 28 de março de 2008
Ultima resposta 5 de abr. de 2008
Respostas 10
Participantes 4