Jtable

Boa tarde…
Como faço para fixar a largura das colunas de um jTable, com a condição de : se forem exibidos, por exemplo, 500 registros, mostrar todos os 500 em celulas de mesma largura , aparecendo um scroll?
Tipo assim: tem como setar um tamanho minimo para as celulas do grid?Por exemplo, defino o tamnho minimo com 100, ai vou la no grid e tento diminuir o tamnho da celula e nao pode deixar diminuir menos que 100.
Preciso urgente de uma solução…

Detalhe: meu grid cresce na horizontal e nao na vertical como na maioria dos casos.Ou seja, meus objetos que populam o grid adicionam colunas e nao linhas.( a quantidade de linhas sao fixas )

Abraço a todos e obrigada desde já.

trecho do codigo onde adiciono as colunas conforme a quantidade de objetos na minha lista:

jTable2.setModel(model);
model.addColumn(" ", new Object[]{“Resultado”, “”, “LSG”, “LSC”, “Valor Médio”, “LIC”, “LIG”});

		for( int i = 0; i < listaTOsCustom.size(); i++ ){
			DadosQualidadePilhaTOCustom custom = ( DadosQualidadePilhaTOCustom )listaTOsCustom.get( i );
			
			Color cResultado = Color.WHITE;
			Color cEmBranco = Color.WHITE;
			Color cLsg = Color.WHITE;
			Color cLsc = Color.WHITE;
			Color cValorMedio = Color.WHITE;
			Color cLic = Color.WHITE;
			Color cLig = Color.WHITE;
			
			if ( ( custom.getLsc()!= null && custom.getLic()!= null &&
				        new Double( custom.getResultado() ).doubleValue() < new Double( custom.getLsc()).doubleValue() &&
				        new Double( custom.getResultado() ).doubleValue() > new Double( custom.getLic() ).doubleValue() ) ||
				  ( custom.getLsc() == null && custom.getLic()!= null && 
					    new Double( custom.getResultado() ).doubleValue() > new Double( custom.getLic() ).doubleValue() ) ||
				  ( custom.getLic() == null && custom.getLsc()!= null && 
						new Double( custom.getResultado() ).doubleValue() < new Double( custom.getLsc() ).doubleValue() ) ) {
				
							cResultado = Color.GREEN;
							cValorMedio = Color.GREEN;			    			

			}else if ( ( custom.getLsc()!= null && custom.getLsg()!= null && 
								new Double( custom.getResultado() ).doubleValue() > new Double( custom.getLsc() ).doubleValue() &&
								new Double( custom.getResultado() ).doubleValue() <= new Double( custom.getLsg() ).doubleValue() ) ||
					   ( custom.getLsc()== null && custom.getLsg() != null &&
							    new Double( custom.getResultado() ).doubleValue() <= new Double( custom.getLsg() ).doubleValue() ) ||
					   ( custom.getLsg() == null && custom.getLsc()!= null &&
							    new Double( custom.getResultado() ).doubleValue() > new Double( custom.getLsc() ).doubleValue() ) ) {
				
		    				cResultado = Color.YELLOW;
		    				cLsc = Color.YELLOW;
				
			}else if ( ( custom.getLic() != null && custom.getLig() != null &&
								new Double( custom.getResultado() ).doubleValue() < new Double( custom.getLic() ).doubleValue() &&
								new Double( custom.getResultado() ).doubleValue() >= new Double( custom.getLig() ).doubleValue() ) ||
					   ( custom.getLic() == null && custom.getLig()!= null &&
							    new Double( custom.getResultado() ).doubleValue() >= new Double( custom.getLig() ).doubleValue() ) ||
				       ( custom.getLig() == null  && custom.getLic() != null &&
				       		    new Double( custom.getResultado() ).doubleValue() < new Double( custom.getLic() ).doubleValue() ) ) {
			
			  				cResultado = Color.YELLOW;
			  				cLic = Color.YELLOW;  				
		    }else if ( custom.getLsg() != null && new Double( custom.getResultado() ).doubleValue() > new Double( custom.getLsg() ).doubleValue() ){
				
		    				cResultado = Color.RED;
		    				cLsg = Color.RED;
				
			}else if ( custom.getLig() != null && new Double( custom.getResultado() ).doubleValue() < new Double( custom.getLig() ).doubleValue() ){
				
							cResultado = Color.RED;
							cLig = Color.RED; 
			} 
			
			
			
			model.addColumn( custom.getTitulo(), new Object[]{ new Object[]{ custom.getResultado(), cResultado },
				new Object[]{ custom.getEmBranco(),cEmBranco }, new Object[]{ custom.getLsg(), cLsg }, 
				new Object[]{ custom.getLsc(), cLsc }, new Object[]{ custom.getValorMedio(),cValorMedio }, 
				new Object[]{ custom.getLic(), cLic }, new Object[]{ custom.getLig(),cLig} } );
			
		}			

		jTable2.setDefaultRenderer(Object.class, new ColorValueCellRenderer());			
		jScrollPane2.setViewportView(jTable2);

Vê se funciona (não testei):

JTable jt;
//Suas colunas não serão redimensionadas caso o 
//seja diferente do tamanho das colunas
jt.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

/* Já que o tamanho das colunas não vai ser alterado,
   com esse método, você define o tamnho da área 
   visível da JTable; se os dados ultrapassarem,
   aparecerá uma barra de rolagem.
*/
jt.setPreferredScrollableViewportSize(new Dimension());


/* Não sei se este método é necessário; acho que 
   quando se define auto_resize_off, automaticamente
   o atributo de autoscroll é setado para true, 
   mas por via das dúvidas.
*/
jt.setAutoscrolls(true);

Quando ao comprimento das colunas, pelo que entendi da documentação,
o o comprimento inicial será definido pelo comprimento do conteúdo. E nesse caso, as novas alterações no modelo não alterarão a dimensão das colunas.

Realmente não sei se ajudei, mas…

Olha, eu fiz assim e funcionou. O único problema é adivinhar o tamanho certo.

        TableColumn col0 = tblItens.getColumnModel().getColumn(0);
        col0.setPreferredWidth(54);
        col0.setResizable(false);
        TableColumn col1 = tblItens.getColumnModel().getColumn(1);
        col1.setPreferredWidth(280);
        col1.setResizable(false);
        TableColumn col2 = tblItens.getColumnModel().getColumn(2);
        col2.setPreferredWidth(100);
        col2.setResizable(false);

Um abraço.

Pessoal,

valew pela ajudaça ai!
Incrementei um pouquinho metodo do Hadilson e rolu tudo blz,100%.
Caso alguem precise,to postando meu codigo como problema já resolvido>

Abração a todos.

 public void initComponentsCuston(){
//    	this.getCenarioWrapper();
    	try {
    		controller.addRequestParameter( "pilha", pilha );
			controller.execute( this, null, "obterEspecificacoesTecnicasPilha" );	
			//lista que sera exibida no grid
			List listaTOsCustom = ( List )controller.getResponseParameter( "listaTOsCustom" );
//			if( listaTOsCustom != null && listaTOsCustom.size() > 0 ){
				DefaultTableModel model = new DefaultTableModel(){
					public boolean isCellEditable(int row, int column) {
				        return false;
				    }
				};
				
				setPreferredSize(new java.awt.Dimension(504, 350));
				jPanel1.setPreferredSize(new java.awt.Dimension(1000, 350));
			    jScrollPane2.setPreferredSize(new java.awt.Dimension(1000, 350));
//			    jPanel1.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
//				Suas colunas não serão redimensionadas caso o   
//				seja diferente do tamanho das colunas   
				jTable2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);   
				 
				/* Já que o tamanho das colunas não vai ser alterado,  
				   com esse método, você define o tamnho da área  
				   visível da JTable; se os dados ultrapassarem,  
				   aparecerá uma barra de rolagem.  
				*/   
				jTable2.setPreferredScrollableViewportSize(new Dimension(1000,200));  				
				
				jTable2.setModel(model);
				
				model.addColumn(" ", new Object[]{"Resultado", "", "LSG", "LSC", "Valor Médio", "LIC", "LIG"});
//				jTable2.getColumnModel().getColumn( 0 ).setPreferredWidth( 2000 );
				for( int i = 0; i < listaTOsCustom.size(); i++ ){
					DadosQualidadePilhaTOCustom custom = ( DadosQualidadePilhaTOCustom )listaTOsCustom.get( i );
					
					Color cResultado = Color.WHITE;
					Color cEmBranco = Color.WHITE;
					Color cLsg = Color.WHITE;
					Color cLsc = Color.WHITE;
					Color cValorMedio = Color.WHITE;
					Color cLic = Color.WHITE;
					Color cLig = Color.WHITE;
					
					//se resultado < lig
					if ( custom.getLig() != null && new Double( custom.getResultado() ).doubleValue() < new Double( custom.getLig() ).doubleValue() ){
	    				
						cResultado = Color.RED;
						cLig = Color.RED; 
					}else 
					//se resultado > lsg
					if ( custom.getLsg() != null && new Double( custom.getResultado() ).doubleValue() > new Double( custom.getLsg() ).doubleValue() ){
	    				
		    				cResultado = Color.RED;
		    				cLsg = Color.RED;
			
					}else
					//se resultado < lic	
					if ( ( custom.getLic() != null &&
							new Double( custom.getResultado() ).doubleValue() < new Double( custom.getLic() ).doubleValue() ) ) {
			
		  				cResultado = Color.YELLOW;
		  				cLic = Color.YELLOW;  				
					}else
					//se resultado > lsc	
					if ( ( custom.getLsc()!= null && 
							new Double( custom.getResultado() ).doubleValue() > new Double( custom.getLsc() ).doubleValue() ) ) {
			
	    				cResultado = Color.YELLOW;
	    				cLsc = Color.YELLOW;
			
					}else
					//se o valor medio for diferente de null( sempre havera um valor medio.Só não havera se as outras especificacoes( lsc, lic,lsg,lig )
					// forem nulas, ai não tem necessidade de colorir.
					if (  custom.getValorMedio() != null ) {
					
						cResultado = Color.GREEN;
						cValorMedio = Color.GREEN;			    			
	
					}
	
					
					model.addColumn( custom.getTitulo(), new Object[]{ new Object[]{ custom.getResultado(), cResultado },
						new Object[]{ custom.getEmBranco(),cEmBranco }, new Object[]{ custom.getLsg(), cLsg }, 
						new Object[]{ custom.getLsc(), cLsc }, new Object[]{ custom.getValorMedio(),cValorMedio }, 
						new Object[]{ custom.getLic(), cLic }, new Object[]{ custom.getLig(),cLig} } );
					
					
					
					
				}			
	
				jTable2.setDefaultRenderer(Object.class, new ColorValueCellRenderer());			
				jScrollPane2.setViewportView(jTable2);
		
//			}		
    	}catch (Exception e) {
				s_logger.error( "Erro na construção da tela.", e );
				ExceptionDialog.showExceptionDialog( "Erro", "Ocorreu um erro genérico ao executar a operação.", e );
		}
    }