Não consigo adicionar o JTable

16 respostas
evertonsilvagomesjav

Bom dia a todos estou tentando adicionar um JTable no meu Panel mas nao to conseguindo, segue o codigo:

Panel panelTable = new Panel();
			panel.setBorder(new TitledBorder("Tabela de Músicas"));
			
			panel.add(panelTable, "dock center"); // panelTable não esta ficando extendido no meio do meu Panel.
						
			Table table = new Table();
			
			DefaultTableModel m = new DefaultTableModel(new Object[][]{}, new String[]{"w","n"}); // OBSERVAÇAO ESTE DefaultTableModel é SO PRA TESTAR SE IA ADD MEU TABLE, JA TENHO MEU TableModel extendendo de Abstract
			
			table.setModel(m);
			
			ScrollPane scroll = new ScrollPane();
			
			scroll.add(table);
						
			panelTable.add(scroll, "dock center");

Outra duvida tenho meu seguinte Panel:

/** Bloco utilizado para adicionar um Panel no JDialog **/
		{
		
			panel.setLayout(new MigLayout());
			
			panel.setBorder(new TitledBorder("MP3"));
						
			this.add(panel);
						
			
		}

Quando adiciono um Label nesse Panel ele fica no inicio do Panel até ai normal.

Agora porque quando tenho um Panel com um MigLayout dessa forma meu Label é inserido no MEIO do Panel e não no Inicio:

JPanel panel = new JPanel();
	
		
		/** Bloco utilizado para adicionar um Panel no JDialog **/
		{
		
			panel.setLayout(new MigLayout("", "[grow]" , "[grow]"));
			
			panel.setBorder(new TitledBorder("MP3"));
						
			this.add(panel);
						
			
		}

16 Respostas

evertonsilvagomesjav

alguem ajuda?

viniciusgundim

Everton, vc está tentando criar em cima de código, usa o netbeans, criar frames nele é muito fácil, só vc arrastar o pane, e jogar a jtable em cima, vc consegue modelar para até criar a scroolbar com muita facilidade, agora se quiser o código msm, poste ai que eu mando o código!

evertonsilvagomesjav

Nem cara quero criar na “unha” mesmo, to utilizando o MigLayout so que estou tendo esses problemas, e quero saber a diferença entre aqueles parametros do construtor do MigLayout tb. Ja andei lendo a documentaçao dele no QuickStart mas estou com dificuldades.

evertonsilvagomesjav

alguem?

Marky.Vasconcelos

Só uma pergunta, por que voce esta usando AWT invés de Swing?

E outra…já que esta usando awt voce importou o MigLayout correto? Tem uma versao pra awt e outra pra swing.

evertonsilvagomesjav

Mark_Ameba:
Só uma pergunta, por que voce esta usando AWT invés de Swing?

E outra…já que esta usando awt voce importou o MigLayout correto? Tem uma versao pra awt e outra pra swing.

Mark pq AWT? To usando swing uai.

Marky.Vasconcelos

Table, Panel são componentes AWT.

JTable, JPanel são componentes Swing.

evertonsilvagomesjav

Mark_Ameba:
Table, Panel são componentes AWT.

JTable, JPanel são componentes Swing.

Hum nem sabia pq nunca usei AWT mas, Table e Panel são classes minhas herdando de JPanel e JTable.

Marky.Vasconcelos

Ah tah… então não sei qual o erro novamente.

Será que voce não importou errado então? Posta a classe inteira.

evertonsilvagomesjav

Mark_Ameba:
Ah tah… então não sei qual o erro novamente.

Será que voce não importou errado então? Posta a classe inteira.

Assim que chegar em casa eu posto a classe nao estou com ela aqui. Mas Mark quando vc utiliza o MigLayout vc passa algo no Construtor dele para questoes de alinhamento? Pq quando eu passei igual citei desse modo:

new MigLayout("","[fill]",["grow")); Desse modo quando adiciono um component ele nao fica no inicio do meu JPanel ele adiciona no meio do JPanel, mas em compensação desta maneira eu consigo adicionar um JPanel dentro do outro por exemplo, ocupando todo o espaço vertical ou horizontal usando “growy” e “growx”.

Quando faço dessa maneira, sem parametros no construtor:

new MigLayout(); Não consigo fazer com que um JPanel ocupe todo o espaço na vertical ou horizontal usando “growx” ou “growy”, mas quando adiciono um component como um “Label” ele fica no inicio do JPanel e nao no meio como no exemplo de cima.

Essa duvida q esta me corroendo kkk. Sabe me explicar?

Vlw.

E

Dica: para ver o que pode estar acontecendo, use:

new MigLayout("debug","[fill]",["grow"));

em vez de

new MigLayout("","[fill]",["grow"));

Quando terminar de corrigir os problemas, tire o “debug”.

Marky.Vasconcelos

Eu normalmente uso o construtor sem parametros.
Por que normalmente cada JPanel é composto de varios JPanels para melhor posicionar os componentes.

evertonsilvagomesjav

entanglement:
Dica: para ver o que pode estar acontecendo, use:

new MigLayout("debug","[fill]",["grow"));

em vez de

new MigLayout("","[fill]",["grow"));

Quando terminar de corrigir os problemas, tire o “debug”.

vou fazer o teste e posto aqui

evertonsilvagomesjav

Mark_Ameba:
Eu normalmente uso o construtor sem parametros.
Por que normalmente cada JPanel é composto de varios JPanels para melhor posicionar os componentes.

Mark eu tambem estava fazendo assim, daí criei um JPanel onde esta adicionado no Frame, tipo isso: this.seContentPane(MeuJPanel), dai dentro desse JPanel queria adicionar outro JPanel esticado verticalmente e nao consegui, foi quando usei os parametros no construtor do Mig ai deu certo

evertonsilvagomesjav

A class inteira

package com.br.gui;

import java.awt.Dimension;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;

import net.miginfocom.swing.MigLayout;

import com.br.artistas.Artista;
import com.br.leitura.pasta.musica.LeituraPasta;
import com.br.models.tables.TableModel;
import com.br.utils.ComboBox;
import com.br.utils.Label;
import com.br.utils.ScrollPane;
import com.br.utils.Table;

public class Dialog extends JDialog{
	
	ComboBox comboBox;
	LeituraPasta leitura;
	String[] artistas = {"",""};
	Dialog dialog;
	
	JTable table;
	
	List<Artista> list;
		
	String nomeDaPasta = "";
	TableModel modelTable;
	
	
	public Dialog(Gui gui, Dialog dialog){
				
		super(gui);
		
		this.dialog = dialog;
		
		this.setVisible(true);
		
		this.setModal(true);
		
		this.initGUI();
		
		this.pack();
		
		this.setResizable(false);
		
		this.setSize(new Dimension(1280,768));
		
		this.setLocationRelativeTo(null);
					
		
	}
	
	public void initGUI(){
			
		if(leitura == null){
			
			this.leitura = new LeituraPasta();
			
		}
		
		
		
		JPanel panel = new JPanel();
		
		this.table = new JTable();
		
		/** Bloco utilizado para adicionar um Panel no JDialog **/
		{
		
			//panel.setLayout(new MigLayout()); // sem parametros no construtor nao funciona como queria, 
			panel.setLayout(new MigLayout("" ,  "[grow]" ,"[grow]")); // aqui funciona do jeito que eu queria. mas se add um Label ele fica no meio.

			panel.setBorder(new TitledBorder("MP3"));
						
			this.setContentPane(panel);
						
			
		}
		
		
		/** Bloco utilizado para adicionar components no Panel **/
		{
			
			Label label = new Label("Músicas/Estilos:");
			
			panel.add(label, "split");
		
			this.comboBox = new ComboBox();
			this.comboBox.addItemListener(new ItemListener(){
			
				@Override
				public void itemStateChanged(ItemEvent arg0) {
					
					if(!nomeDaPasta.equalsIgnoreCase(comboBox.getSelectedItem().toString()))
					
						nomeDaPasta = comboBox.getSelectedItem().toString();
										
						artistas = leitura.leNomeDasMusicas(nomeDaPasta);
					
						list = addArtistas(artistas, nomeDaPasta);
							
						if(modelTable == null){
						
							modelTable = new TableModel(list);
							
							table.setModel(modelTable);
							
						}else{
							
							modelTable.addLista(list);
						
						}
																		
						
				}
				
			});
				
						
			String[] nomePastasMusicais = leitura.lePasta();
			
			DefaultComboBoxModel model = new DefaultComboBoxModel(nomePastasMusicais);
			
			this.comboBox.setModel(model);
			
			panel.add(this.comboBox, "w :30: , h :20: ,wrap");
			
			JPanel panelTable = new JPanel();
			panelTable.setLayout(new MigLayout("", "[grow]", "[grow]"));
			panelTable.setBorder(new TitledBorder("Tabela de Músicas"));
			
			panel.add(panelTable, "dock center");
						
			ScrollPane scroll = new ScrollPane();
			
			scroll.setViewportView(table);
						
			panelTable.add(scroll, "grow");
					
			
		}
		
	}
	
	public List<Artista> addArtistas(String[] nomeArtistas, String nomeDaPasta){
	
		String nomeArtistaMaisMusica;
		String[] nomesSeparados;
		
		String nomeArtista;
		String genero = nomeDaPasta;
		String nomeDaMusica;
		
		List<Artista> list = new ArrayList();
		
		for(int i = 0; i < nomeArtistas.length; i++){
		
			nomeArtistaMaisMusica = nomeArtistas[i];
	
			nomesSeparados = nomeArtistaMaisMusica.split("-");
			nomeArtista = nomesSeparados[0];
			
			
			nomeDaMusica = nomesSeparados[1];
			
			Artista artista = new Artista();
			
			artista.setNomeArtista(nomeArtista);
			artista.setGenero(genero);
			artista.setNomeMusica(nomeDaMusica);
			
			list.add(artista);
						
		}
				

		return list;		
		
		
	}
	
	public JTable getTable(){
		
		if(this.table == null){
			
			table = new JTable();
			
		}
		
		
		return this.table;
	}
	
}
Marky.Vasconcelos

Se todos os seus componentes são programados para apenas se extender, se seu JPanel maior não tiver um tamanho eles não vão saber até onde se “esticar”.

Nao sei se é o caso mas troque “grow” por “growx,growy”

Criado 12 de junho de 2010
Ultima resposta 18 de jun. de 2010
Respostas 16
Participantes 4