Problema com JTable

5 respostas
A

Ola,

Estou com um grande problema aqui, eu tenho estas duas classes, é uma calculadora de IP só que quando ele deve exibir mais de um resultado no JTable ele não consegue e mostra apenas um.
Usei o exemplo 19.5.5.1 subnet 30

IPAddress

//Importação de pacotes necessários
import javax.swing.*;
import java.math.*;
import java.util.*;

public class IPAddress
{
	//Variáveis de Instância
	int 	oct1, 
			oct2, 
			oct3, 
			oct4, 
			subrede;
	StringTokenizer stringtokenizer, stringtokenizer1;
	String 	classe, subnet;
	
	//Mínimo de bits para subredes A,B,C		     
	int  min[]  = new int[3];	

	//Máximo de bits para subredes A,B,C		
	long max[]  = new long[3];
			
	public IPAddress(int oct1, int oct2, int oct3, int oct4, int subrede)
	{
		try{	
				//Altera o estado dos Atributos
				this.oct1 = oct1;
				this.oct2 = oct2;
				this.oct3 = oct3;
				this.oct4 = oct4;
				this.subrede = subrede;
				
				//De 0 a 126 classe A sem considerar o 10
				if((oct1>0&&oct1<127)&&(oct1!=10)) classe="A";
				
				//10 Reservado para NAT e Proxy
				if(oct1==10) classe="A Privativo";	
				
				//127 Teste de Interface
				if(oct1==127) classe="LoopBack";	
					
				//De 128 a 191 classe B
				if((oct1>127&&oct1<191)&&(oct1!=172)) classe="B";
				
				//172 Reservado para NAT e Proxy
				if(oct1==172) classe="B Privativo";		
				
				//192 Reservado para NAT e Proxy
				if(oct1==192) classe="C Privativo";
				
				//De 192 a 223 classe C
				if(oct1>192&&oct1<224)	classe="C";
				
				//De 224 a 239 classe D
				if(oct1>223&&oct1<240)	classe="D Experimental";
				
				//De 240 a 254 classe E
				if(oct1>239&&oct1<255)	classe="E Experimental";			
				
				//Ip Invalido
				if(oct1<0&&oct1>254) classe="Inválida";
								
			}
			
			//Se for digitado caractere diferente de numero dispara exceção
			catch( NumberFormatException e )
			{
				JOptionPane.showMessageDialog(null,"Formato de Endereço IP ou Número de Subredes Inválido.","IPCalc - Validação", JOptionPane.ERROR_MESSAGE);
			}
	}
	
	public String retornarIPClasse()
	{	
		//Retorna a classe do IP
		return classe;
	}
	
	public int retornarNumDeBitsEmprestados()
	{	
		//Variável de Retorno			     
		int i=0, n_bits = 0;
		
		//Máximo de bits para subredes A,B,C
		for(i=0;i<3;i++) max[i] = 30; 			    
		
			 //Classe A
		     min[0] =  8;		     
		     //Classe B
		     min[1] =  16;		     
		     //Classe C
		     min[2] =  24;
		     
		String mskr_subrede_padrao = "255.";		     
				
		//Se não tiver subredes
		if( classe.equals("A")||classe.equals("A Privativo") ) i = 0;	
		if( classe.equals("B")||classe.equals("B Privativo") ) i = 1;		
		if( classe.equals("C")||classe.equals("C Privativo") ) i = 2;
		if( classe.equals("D Experimental")||classe.equals("E Experimental")||classe.equals("LoopBack")||classe.equals("Inválida") ) return 0;
			
		//se subrede <= 0 retorna 0
		if( ( subrede - min[i] ) <= 0 ) return 0;
		
		//se subrede > máximo permitido retorna 0
		if( subrede > max[i] )
		{			
			 JOptionPane.showMessageDialog(null,"" + max[i] + " é o número máximo de bits para subredes classe " + classe + ".","IPCalc - Validação", JOptionPane.ERROR_MESSAGE);
			 return 0;
		}
		else
		{
			//bits da subrede - mínimo permitido
			n_bits = subrede - min[i];
		}
	
		//retorna bits restantes
		return n_bits;
		
	}	
	
	public String retornarSubredeAddress()
	{
		int 	x=0, 
		    	n_bits = retornarNumDeBitsEmprestados(),
		    	quoc_nbits,
		    	rest_nbits,
		    	msk_comp = 0;
		    		    	
		String 	std_mask = "";
		
		double  i = 0;
						
		if( classe.equals("A")||classe.equals("A Privativo") ) x = 1;
		if( classe.equals("B")||classe.equals("B Privativo") ) x = 2;
		if( classe.equals("C")||classe.equals("C Privativo") ) x = 3;
		if( classe.equals("Loopback") ) return "LoopBack";
		if( classe.equals("Inválida") ) return "Inválida";
		if( classe.equals("D Experimental")||classe.equals("E Experimental") ) return "Experimental";

		
		for( i=0; i<x; i++ ) std_mask += "255.";
		
		if(n_bits<=1)
		{
			if( classe.equals("A")||classe.equals("A Privativo") )
			{
				subnet = std_mask+"0.0.0";
				//System.out.println(subnet);
				
				return   std_mask+"0.0.0";
			}
			if( classe.equals("B")||classe.equals("B Privativo") )
			{
				subnet = std_mask+"0.0";
				//System.out.println(subnet);
				
				return std_mask+"0.0";
			}
			if( classe.equals("C")||classe.equals("C Privativo") )
			{
				subnet = std_mask+"0";
				
				//System.out.println(subnet);				
				return std_mask+"0";
			}
		}
		
		quoc_nbits = n_bits/8;
		rest_nbits = n_bits%8;
		
		std_mask += "";
		
		if( classe.equals("A")||classe.equals("A Privativo")||classe.equals("B")||classe.equals("B Privativo") )
		{
			if( quoc_nbits == 0)
			{				
				for( i=0;i<rest_nbits;i++ ) msk_comp += potencia( 2, 8-i-1 );
				std_mask += ""+msk_comp+"";
				
				if((classe.equals("A")||classe.equals("A Privativo"))&&(quoc_nbits==0)) std_mask += ".0.0";
				if((classe.equals("A")||classe.equals("A Privativo"))&&(quoc_nbits==1)) std_mask += ".0";
				if((classe.equals("B")||classe.equals("B Privativo"))&&(quoc_nbits==0)) std_mask += ".0";
				
				subnet = std_mask;
				//System.out.println(subnet);
			}
			else
			{

				for( i=0;i<quoc_nbits;i++ ) std_mask += "255.";
				for( i=0;i<rest_nbits;i++ ) msk_comp += potencia( 2, 8-i-1 );
				std_mask += ""+msk_comp+"";
				if((classe.equals("A")||classe.equals("A Privativo"))&&(quoc_nbits==0)) std_mask += ".0.0";
				if((classe.equals("A")||classe.equals("A Privativo"))&&(quoc_nbits==1)) std_mask += ".0";
				if((classe.equals("B")||classe.equals("B Privativo"))&&(quoc_nbits==0)) std_mask += ".0";
				
				subnet = std_mask;
				//System.out.println(subnet);
			}
		}
		else
		{
			for( i=0;i<rest_nbits;i++ ) msk_comp += potencia( 2, 8-i-1 );
			std_mask += ""+msk_comp+"";
			
			subnet = std_mask;
			//System.out.println(subnet);
		}
		
		//System.out.println(subnet);
		return std_mask;		
		
	}
	
	public double potencia( double base, double expoente )
	{
		//Variável de controle
		double retorno=0;
		
		//Se expoente < 2 retorna 1 ou a base
		if( expoente == 0 )	return 1;
		if( expoente == 1 ) return base;
		
		//Se expoente >=2 calcula a potência
		if( expoente >= 2 ) retorno = base * potencia( base, (expoente - 1) );
		
		//retorna resultado
		return retorno;
	}	
	
	public String retornarBroadCastAddress()
	{
		
		System.out.println("---------------------------------------------------");
		//Índice de controle
		int i = 0, j = 0, valor = 0, contador = 0;
		
		//Num. de bits emprestados para subrede
		int nbits =  retornarNumDeBitsEmprestados();		
		
		//Vetor para partes do end. de rede
		int partes[] = new int[4], 
		//Vetor para partes do end. de rede
		subparte[] = new int[4], 
		//Vetor para partes do binario da parte de subrede <> 255 ou <> 0
		binario[] = new int[8];
		  
		//Recebe endereco de rede como String
		String endrede = retornarEnderecoDeRede(), 
		
		//Recebe endereco de subrede como String
		subr = retornarSubredeAddress(),
		
		//Variável de retorno
		endbroad = "";
		
		if( classe.equals("LoopBack") ) return "LoopBack";
		if( classe.equals("Inválida") ) return "Inválida";
		if( classe.equals("D Experimental")||classe.equals("E Experimental") ) return "Experimental";			
		
		//Instancia separadores de string com o parâmetro ponto
		stringtokenizer = new StringTokenizer( endrede, ".");
		stringtokenizer1 = new StringTokenizer(   subr, ".");
		
		//Separa os quatro octetos
		for(i=0;i<4;i++)
		{
			//Atribui os octetos do end. de rede ao vetor partes
			partes[i] = Integer.parseInt( stringtokenizer.nextToken() );
			//Atribui os octetos do end. de subrede ao vetor subparte
			subparte[i] = Integer.parseInt( stringtokenizer1.nextToken() );
		}		

		//Caso numero de bits emprestados seja menor que 2
		if( nbits < 2 )
		{
			//Retorna endereços de Broadcast Padrão
			if( classe.equals("A")||classe.equals("A Privativo") ) return partes[0]+".255.255.255";
			if( classe.equals("B")||classe.equals("B Privativo") ) return partes[0]+"."+partes[1]+".255.255";
			if( classe.equals("C")||classe.equals("C Privativo") ) return partes[0]+"."+partes[1]+"."+partes[2]+".255";
		}
		
		//Troca os valores 0 para 255 no vetor partes
		//for(i=0;i<4;i++) if( partes[i] == 0 ) partes[i] = 255;
	
 		//Associa os elementos do vetor no formato IPv4
		endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
		
		//Busca o octeto com descrição diferente de 255 do oct4 ao oct1 na subrede
		for(i=3;i>=0;i--) if(subparte[i]==255) break;
			
		//Acrescenta o índice por causa do decremento da repetição acima		
		i++;
		
		System.out.println( "-->" + endbroad );
				
		//caso não existam bits emprestados, então usar-se-á end. de broadcast padrão
		if( nbits < 2 )
		{
			return endbroad;
		}
		else
		{
			if( classe.equals("C")||classe.equals("C Privativo") )
			{
				valor = subparte[i];
				
				if( partes[i] != 0255 )
				{
					while( valor != 0 )
					{
						binario[j] = valor % 2;	
						if(binario[j]==0) contador ++;			
						valor = valor / 2;							
						j++;			
					}
							
					partes[3] += (int) potencia( 2, contador ) - 1;
					System.out.println("-->Funcionou" + partes[3]);
					endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
					return endbroad;
				}
				else
				{

						partes[3] = (int) potencia( 2, nbits ) - 1;
						System.out.println("aqui"+partes[3]);
						endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
						return endbroad;						
				}
			}
			
			if( classe.equals("B")||classe.equals("B Privativo") )
			{
				int z = 0;
				for(z=0;z<3;z++) if(subparte[z]!=255) break;
				
				if(z==2)
				{
					partes[3] = 255;
					valor = subparte[z];
				
					if( partes[i] != 0255 )
					{
						while( valor != 0 )
						{
							binario[j] = valor % 2;	
							if(binario[j]==0) contador ++;			
							valor = valor / 2;							
							j++;			
						}
								
						partes[z] += (int) potencia( 2, contador ) - 1;
						System.out.println("-->Funcionou" + partes[3]);
						endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
						return endbroad;
					}
					else
					{
						partes[3] = (int) potencia( 2, (32 - Integer.parseInt(subnet)) ) - 1;
						System.out.println("aqui"+partes[3]);
						endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
						return endbroad;					
					}									
					
				}
				else
				{
					valor = subparte[z];
					
					if( partes[i] != 0255 )
					{
						while( valor != 0 )
						{
							binario[j] = valor % 2;	
							if(binario[j]==0) contador ++;			
							valor = valor / 2;							
							j++;			
						}
								
						partes[3] += (int) potencia( 2, contador ) - 1;
						System.out.println("-->Funcionou" + partes[3]);
						endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
						return endbroad;
					}
					else
					{
						partes[3] = (int) potencia( 2, (32 - Integer.parseInt(subnet)) ) - 1;
						System.out.println("aqui"+partes[3]);
						endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
						return endbroad;					
					}									
					
				} 				
			}

			if( classe.equals("A")||classe.equals("A Privativo") )
			{
				int z = 0;
				for(z=0;z<3;z++) if(subparte[z]!=255) break;
				
				if(z==1)
				{
					partes[2] = 255;
					partes[3] = 255;
					valor = subparte[z];
				
					if( partes[i] != 0255 )
					{
						while( valor != 0 )
						{
							binario[j] = valor % 2;	
							if(binario[j]==0) contador ++;			
							valor = valor / 2;							
							j++;			
						}
								
						partes[z] += (int) potencia( 2, contador ) - 1;
						System.out.println("-->Funcionou" + partes[3]);
						endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
						return endbroad;
					}
					else
					{
						partes[3] = (int) potencia( 2, (32 - Integer.parseInt(subnet)) ) - 1;
						System.out.println("aqui"+partes[3]);
						endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
						return endbroad;					
					}									
					
				}
				else
				{
					if(z==2)
					{
						partes[3] = 255;						
						valor = subparte[z];
						
						if( partes[i] != 0255 )
						{
							while( valor != 0 )
							{
								binario[j] = valor % 2;	
								if(binario[j]==0) contador ++;			
								valor = valor / 2;							
								j++;			
							}
									
							partes[3] += (int) potencia( 2, contador ) - 1;
							System.out.println("-->Funcionou" + partes[3]);
							endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
							return endbroad;
						}
						else
						{
							partes[3] = (int) potencia( 2, (32 - Integer.parseInt(subnet)) ) - 1;
							System.out.println("aqui"+partes[3]);
							endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
							return endbroad;					
						}															
					}
					else
					{
						valor = subparte[z];
						if( partes[i] != 0255 )
						{
							while( valor != 0 )
							{
								binario[j] = valor % 2;	
								if(binario[j]==0) contador ++;			
								valor = valor / 2;							
								j++;			
							}
									
							partes[3] += (int) potencia( 2, contador ) - 1;
							System.out.println("-->Funcionou" + partes[3]);
							endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
							return endbroad;
						}
						else
						{
							partes[3] = (int) potencia( 2, (32 - Integer.parseInt(subnet)) ) - 1;
							System.out.println("aqui"+partes[3]);
							endbroad = ""+partes[0]+"."+partes[1]+"."+partes[2]+"."+partes[3]+"";
							return endbroad;					
						}																					
					}					
				} 				
			}		
		}
		return endbroad;
	}

	public double retornarNumDeHostsValidos()	
	{
		//Variáveis de controle
		double 	     x = 0,
				     y = 0,
				     z = 0,
				     w = 0;
		
		int n_bits = retornarNumDeBitsEmprestados(),
			total  = 0, 
		         i = 0;

		if( classe.equals("LoopBack") ) return 0;
		if( classe.equals("Inválida") ) return 0;
		if( classe.equals("D Experimental")||classe.equals("E Experimental") ) return 0;

		//Retorna numero de hosts para subrede padrão nas classes A, B e C.		         
		if((classe.equals("A")||classe.equals("A Privativo"))&&(n_bits<2)) return 16777214;
		if((classe.equals("B")||classe.equals("B Privativo"))&&(n_bits<2)) return 65534;
		if((classe.equals("C")||classe.equals("C Privativo"))&&(n_bits<2)) return 254;
				         
		         
        //System.out.println("n_bits:" + n_bits);
		
		//Define num. mínimo de bits para classes A e B
		if((classe.equals("A")||classe.equals("A Privativo"))) i=8;
		if((classe.equals("B")||classe.equals("B Privativo"))) i=16;
		
		//retorna o num de redes válidas * num de hosts validos por cada rede válida
		if((classe.equals("C")||classe.equals("C Privativo"))) return ((potencia( 2, n_bits )-2)*(potencia( 2, 8-n_bits)-2));

		//32 - minimo de bits da classe		
		x = 32 - i;
		if(x<0) x *= -1;
		//System.out.println("x:" + x);		
		
		//32 - minimo de bits da classe - num. de bits emprestados
		y = x - n_bits;
		if(y<0) y *= -1;
		//System.out.println("y:" + y);

		//Obtém num. de subredes válidas				
		z = ( potencia( 2, y ) - 2 ); 
		//System.out.println( "z:" + z );
		
		//Multiplica pelo num. de hosts válidos por subrede
		w = z * (potencia( 2, n_bits ) - 2 );
		//System.out.println( "w:" + w );
		
		//retorna total de hosts válidos
		return w;
	}
	
	public double verificarNumDeSubredes()
	{
		//Variáveis de controle
		double retorno;
		
		//Se ( (2 elevado ao num de bits restantes) - 2 ) < 0 atribui 0 ao retorno
		if( (retorno = potencia( 2 , retornarNumDeBitsEmprestados() ) - 2) < 0 ) retorno = 0;
		
		//Retorna num. de subredes
		return retorno;
	}
	
	public String retornarEnderecoDeRede()
	{
		int i = 0, x = 0,
			octetos[]  = new int[4], 
			bin_rede[] = new int[8],
			bin_mask[] = new int[8],			
			endrede = 0, endmask = 0;
		
		String retorno = "";			

		if( classe.equals("LoopBack") )
		{
			return "LoopBack";
			
		}
		else
		{
			if( classe.equals("D Experimental")||classe.equals("E Experimental") ) 
			{
				return "Experimental";
			}
			else
			{
				if( classe.equals("D Experimental")||classe.equals("E Experimental") )
				{
					return "Experimental";
				}
				else
				{

					stringtokenizer = new StringTokenizer( subnet, ".");
						
					for(i=0;i<8;i++)
					{
						bin_rede[i] = 0;
						bin_mask[i] = 0;
					}
									
					for(i=0;i<4;i++)
					{
						 octetos[i] = Integer.parseInt( stringtokenizer.nextToken() );
						 //System.out.println( octetos[i] );
					}
					
					i=0;
					while(octetos[i]==255) i++;
					
					endmask = octetos[i];
					
					if( i==1 )
					{
						endrede = oct2;
						retorno = ""+oct1+".";
					}
					if( i==2 ) 
					{
						endrede = oct3;
						retorno = ""+oct1+"."+oct2+".";
					}		
					
					if( i==3 )
					{
						endrede = oct4;
						retorno = ""+oct1+"."+oct2+"."+oct3+".";
					}		
					
					//System.out.println( endrede );
					
					x=0;
					while( endrede != 0 )
					{
						bin_rede[7-x] = endrede % 2;
						endrede = endrede/2;			
						//System.out.println("bin_rede" + bin_rede[7-x]);
						x++;
					}
					
					x = 0;
					while( endmask != 0 )
					{		
						bin_mask[7-x] = endmask % 2;
						endmask = endmask/2;
						//System.out.println("bin_mask" + bin_mask[7-x]);			
						x++;
					}
					
					int saida = 0;
					for(x=0;x<7;x++) 
					{
						if(bin_mask[x]==1&&bin_rede[x]==1) saida += potencia( 2, 7 - x);
					}
					
					retorno += saida;
					
					if(i==1) retorno += ".0.0";
					if(i==2) retorno += ".0";
			
					//System.out.println("saida:"+saida);												
				}
			}
		}						
		 									
		return retorno;						
	}
}

E a outra principal

IPMain

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

public class IPMain extends JDialog
{

	JLabel 		lbl_title 				= new JLabel( "Verificador de IP");
	JLabel      lbl_logo 				= new JLabel( new ImageIcon("logo.gif") );
	JLabel 		lbl_ipaddress 			= new JLabel( "Endereco IP:" );
	JTextField 	txt_oct1 				= new JTextField(3);	
	JTextField 	txt_oct2 				= new JTextField(3);	
	JTextField 	txt_oct3 				= new JTextField(3);
	JTextField 	txt_oct4 				= new JTextField(3);
	JLabel	    lbl_subr                = new JLabel("SubRede(Num.Bits):");
	JTextField 	txt_subr 				= new JTextField(2);
	JButton    	btn_verificar 			= new JButton("Analisar");
	JButton    	btn_salvar  			= new JButton("Salvar");
	JButton    	btn_fechar    			= new JButton("Fechar"  );
	JPanel 		p0, p1, p2, p3, p4, p5, p6, p7;
	StringTokenizer stringtokenizer		= null;
	IPAddress   ip;
	
	Vector      linhas = new Vector(), linha = new Vector();
	Vector		titulo_grid = new Vector();
	JTable 		jtable = new JTable(); 
	JScrollPane jscrollpane;

	Container c_main = getContentPane();	
	       	
	JLabel     lbl[] = new JLabel[14];
	JTextField txt[] = new JTextField[14];
	JPanel     pnl[] = new JPanel[6];	
		
	public IPMain()
	{	
		c_main.setLayout( new BorderLayout() );
		
		p0 = new JPanel();
		p1 = new JPanel();
		p2 = new JPanel();
		p3 = new JPanel();
		p4 = new JPanel();
		p5 = new JPanel();
		p6 = new JPanel();
		p7 = new JPanel();
						
		p0.setLayout( new GridLayout( 2, 1 ) );	
		p1.setLayout( new FlowLayout( FlowLayout.CENTER ) );
		p2.setLayout( new FlowLayout( FlowLayout.CENTER ) );
		p3.setLayout( new GridLayout( 2, 1 ) );
		p4.setLayout( new GridLayout( 7, 4 ) );
		p5.setLayout( new GridLayout( 1, 1 ) );
		p6.setLayout( new GridLayout( 1, 2 ) );		
		p7.setLayout( new FlowLayout( FlowLayout.CENTER ) );

		txt_oct1.setColumns(3);		
		txt_oct1.setHorizontalAlignment( JTextField.CENTER );
		
		txt_oct2.setColumns(3);		
		txt_oct2.setHorizontalAlignment( JTextField.CENTER );

		txt_oct3.setColumns(3);		
		txt_oct3.setHorizontalAlignment( JTextField.CENTER );

		txt_oct4.setColumns(3);		
		txt_oct4.setHorizontalAlignment( JTextField.CENTER );
						
		p1.add( lbl_title );
		p1.add( lbl_logo  );
		
		p2.add( lbl_ipaddress );	
		p2.add( txt_oct1 );
	 	p2.add( txt_oct1 );
	 	p2.add( txt_oct2 );
	 	p2.add( txt_oct3 );
	 	p2.add( txt_oct4 );
	 	p2.add( lbl_subr );
	 	p2.add( txt_subr );

		p2.add( btn_verificar );
		
		p0.add( p1 );
		p0.add( p2 );	
		
		String lbl_rotulos[] = { " Classe:", " Desc.:", " Bits Emprestados:", " Desc.:", " Masc. SubRede:", " Desc.:", " End. de Rede:", " Desc.:", " SubRedes Válidas:", " Desc.:", " Num. Hosts Válidos:", " Desc.:"," Num. Broadcast:", " Desc.:"};
			
		int i=0;				
		for(i=0; i<14; i++)
		{
			lbl[i] = new JLabel( lbl_rotulos[i] );
			txt[i] = new JTextField(11);
			p4.add( lbl[i] );
			p4.add( txt[i] );
		}		
																		
		titulo_grid.addElement("Rede");
		titulo_grid.addElement("Primeiro Host");
		titulo_grid.addElement("Último Host");
		titulo_grid.addElement("BroadCast");
		titulo_grid.addElement("Válido");
		
		int j;
		for(j=0;j<5;j++) linha.addElement("");
		linhas.addElement(linha);
		
		jtable = new JTable( linhas , titulo_grid);
		
		jscrollpane = new JScrollPane( jtable );		
		 		 		
		p6.add( btn_salvar );			
		p6.add( btn_fechar );						
		
		p5.add( jscrollpane );
		
		p3.add( p4 );		
		p3.add( p5 );		
		
		p7.add( p6 );
				
		c_main.add(p0,BorderLayout.NORTH );
		c_main.add(p3,BorderLayout.CENTER);
		c_main.add(p7,BorderLayout.SOUTH );
		
		btn_verificar.addActionListener(
			
			new ActionListener()
			{
				public void actionPerformed( ActionEvent e )
				{
					String oct1, oct2, oct3, oct4, subr;
					linhas.removeAllElements();
					
					oct1 = txt_oct1.getText().trim();
					oct2 = txt_oct2.getText().trim();
					oct3 = txt_oct3.getText().trim();	
					oct4 = txt_oct4.getText().trim();
					subr = txt_subr.getText().trim();	
								
					if( oct1.equals("") || oct2.equals("") || oct3.equals("") || oct4.equals("") )
					{
						System.out.println("IP Inválido");
					}
					else
					{
						if( subr.equals("") ) subr="0";
						
						try{
								int oxt1 = Integer.parseInt(oct1), 
								    oxt2 = Integer.parseInt(oct2), 
								    oxt3 = Integer.parseInt(oct3), 
								    oxt4 = Integer.parseInt(oct4),
								    subx = Integer.parseInt(subr);

								if( ( oxt1> 0 && oxt1<255 )&&
								    ( oxt2>=0 && oxt2<256 )&&
								    ( oxt3>=0 && oxt3<256 )&&
								    ( oxt4>=0 && oxt4<256 )&&
								    ( subx>=0 && subx<=30 ))
								{
									ip = new IPAddress( oxt1,oxt2,oxt3,oxt4,subx);
									
									txt[0].setText( ip.retornarIPClasse() );																		
									txt[2].setText( ""+ip.retornarNumDeBitsEmprestados()+"" );										
									txt[4].setText( ""+ip.retornarSubredeAddress()+"" );										
									txt[6].setText(""+ip.retornarEnderecoDeRede()+"");										
									txt[8].setText( ""+ (int) ip.verificarNumDeSubredes()+"" );										
									txt[10].setText( ""+ (int) ip.retornarNumDeHostsValidos()+"" );										
									txt[12].setText( ""+ ip.retornarBroadCastAddress()+"" );

									//Obtenção do endereço de rede e broadcast
									int oct_rede[]  = new int[4];
									int oct_broad[] = new int[4];
									String primeiro_host="", lst_host="";
									
									//Separar octetos
									StringTokenizer endrede  = new StringTokenizer(ip.retornarEnderecoDeRede(),".");
									StringTokenizer endbroad = new StringTokenizer(ip.retornarBroadCastAddress(),".");
									
									int i=0;
									for( i=0;i<4;i++ )
									{
										oct_rede[i] = Integer.parseInt(endrede.nextToken());
										oct_broad[i] = Integer.parseInt(endbroad.nextToken());
									}
									
									int indice = 0;
									int nbits  = (int) ip.retornarNumDeBitsEmprestados();
									String rede = ip.retornarEnderecoDeRede(),
				  			               broa = ip.retornarBroadCastAddress(),
				  			               classe = ip.retornarIPClasse();
																		
									if( nbits < 2 )
									{													
										linha.removeAllElements();
																														
										primeiro_host = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+(oct_rede[3]+1)+"";
									         lst_host = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+(oct_broad[3]-1)+"";
										
										linha.addElement(rede         );
										linha.addElement(primeiro_host);
										linha.addElement(lst_host     );			
										linha.addElement(broa         );			
										linha.addElement("Válido"     );			
										
										linhas.addElement(linha);					
									}
									else
									{
										int nsubredes = (int) ip.verificarNumDeSubredes() + 2;
										int steps = 0;
										
										if(classe.equals("C")||classe.equals("C Privativo"))
										{
											steps = (int) 8 - ip.retornarNumDeBitsEmprestados();
											steps = (int) ip.potencia( 2, (double) steps );
											System.out.println(steps);
											
											linha.removeAllElements();											
											
											int seq1=0, seq2=steps-1;
											String validade="";
											for( i=0;i<nsubredes;i++ )
											{	
												if(i==0||i==nsubredes-1)
												{
													if(i==0)
													{
														System.out.println("Passou aqui 0");
														
														rede = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+seq1+"";
														System.out.println("Passou aqui 0: rede:"+rede);
														
														primeiro_host = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+(seq1+1)+"";
														System.out.println("Passou aqui 0: 1st:"+primeiro_host);
														
														lst_host = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+(seq2-1)+"";
														System.out.println("Passou aqui 0: lst:"+lst_host);
														
														broa = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+seq2+"";
														System.out.println("Passou aqui 0: broad:"+broa);
														
														validade="Inválido";
																											
													}
													else
													{
														System.out.println("Passou aqui ultimo");
														
														rede = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+seq1+"";
														System.out.println("Passou aqui ultimo: rede:"+rede);
														
														primeiro_host = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+(seq1+1)+"";
														System.out.println("Passou aqui ultimo: 1st:"+primeiro_host);
														
														lst_host = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+(seq2-1)+"";
														System.out.println("Passou aqui ultimo: lst:"+lst_host);
														
														broa = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+seq2+"";
														System.out.println("Passou aqui ultimo: brd:"+broa);
														
														validade="Inválido";	
													}
												}
												else
												{
													System.out.println("Passou aqui meio");
													
													rede = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+seq1+"";
													System.out.println("Passou aqui ultimo: rede:"+rede);
													
													primeiro_host = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+(seq1+1)+"";
													System.out.println("Passou aqui ultimo: 1st:"+primeiro_host);
													
													lst_host = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+(seq2-1)+"";
													System.out.println("Passou aqui ultimo: lst:"+lst_host);
													
													broa = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+seq2+"";
													System.out.println("Passou aqui ultimo: brd:"+broa);
													
													validade="Válido";																					
												}
												
												if(i!=0)
												{
													linha.remove(rede);
													linha.remove(primeiro_host);
													linha.remove(lst_host);
													linha.remove(broa);
													linha.remove(validade);
												}
																						
												linha.addElement(rede);
												linha.addElement(primeiro_host);
												linha.addElement(lst_host);
												linha.addElement(broa);
												linha.addElement(validade);													
													
												linhas.addElement(linha.lastElement());
												
												seq1=seq1+steps;
												seq2=seq2+steps;
											}																													
										}																				
									}
									
									jtable = new JTable( linhas, titulo_grid );
									jscrollpane = new JScrollPane( jtable );
									
									p5.removeAll();
									p5.repaint();
									p5.validate();
									
									p5.add(jscrollpane);
									p5.repaint();
									p5.validate();
							
									c_main.repaint();
									c_main.validate();									
								}
								else
								{
									JOptionPane.showMessageDialog(null,"Formato de Endereço IP ou número de subredes inválido.","IPCalc - Validação", JOptionPane.ERROR_MESSAGE);
								}
								
							}
							catch( NumberFormatException ex )
							{
									JOptionPane.showMessageDialog(null,"Formato de Endereço IP Inválido.","IPCalc - Validação", JOptionPane.ERROR_MESSAGE);
							}
							
						}
						
					}

			    });			    

		setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		setDefaultLookAndFeelDecorated( false );
		setTitle("IPCalc 1.0 - Calculadora IP");
		setResizable( false );
		setSize( 600, 380);		
		show();
	}
	
	public static void main(String args[])
	{
		IPMain ip = new IPMain();
		ip.addWindowListener( 
		
			new WindowAdapter()
			{
				public void windowClosing( WindowEvent e )
				{
					System.exit(0);
				}
			}	
		
		);					
	}	
}


/*
 *											for( i=0;i<nsubredes;i++ )
											{				
												if(i==0||i==nsubredes-1)
												{																						
													linha.removeAllElements();																
													
													//rede = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+oct_rede[3]+"";
													primeiro_host = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+(oct_rede[3]+1)+"";
													lst_host = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+(oct_broad[3]-1)+"";
													//broa = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+oct_rede[3]+"";
													
													linha.addElement(rede);
													linha.addElement(primeiro_host);
													linha.addElement(lst_host);												
													linha.addElement(broa);																			
													linha.addElement("Inválido");								
													
													oct_rede[3]+=steps;
												}
												else
												{
													linha.removeAllElements();
													
													primeiro_host = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+(oct_rede[3]+1)+"";
													lst_host = ""+oct_broad[0]+"."+oct_broad[1]+"."+oct_broad[2]+"."+(oct_broad[3]-1)+"";
													
													linha.addElement(rede);
													linha.addElement(primeiro_host);												
													linha.addElement(lst_host);																							
													linha.addElement(broa);																																
													linha.addElement("Válido");																															
												}
												
												oct_rede[3]+=steps;
												rede = ""+oct_rede[0] +"."+oct_rede[1] +"."+oct_rede[2] +"."+oct_rede[indice]+"";
												
												linhas.addElement(linha);											
											}																						
										}
										
//										if(classe.equals("B")||classe.equals("B Privativo")) indice=2;
//										if(classe.equals("A")||classe.equals("A Privativo")) indice=1;
//										if(!(classe.equals("D Experimental")||classe.equals("E Experimental")))
//										{
																																	
										
										
											
//											if(classe.equals("C")||classe.equals("C Privativo")) indice=3;
//											{
												
//											}
											
											//se for classe C
									}
*/

O que pode ser?

5 Respostas

brlima

Cara, tenta resumir teu problema pra poder ajudar… Tipo:
:arrow: Certifiquese: tá mesmo adicionando ma JTable?
:arrow: Ja deu uns println pra saber se esta no tablemodel?
:arrow: Em que momento aparece apenas uma linha?

Bem, se puder ajudar fica melhor pra te ajudar tb :smiley:

flw!

Ironlynx

Zopo,tem umas 1000 linhas aí…(OK,devo tah exagerando…)
Em cada linha vc quer um determinado num de IP eh isso?

A

“Ironlynx”:
Zopo,tem umas 1000 linhas aí…(OK,devo tah exagerando…)
Em cada linha vc quer um determinado num de IP eh isso?

É Isso mesmo.

E ja verifiquei com o println, esta tudo certo pelo menos rodou aqui…

A

E ai alguem conseguiu???

Ironlynx

Zopo,não testei sua aplicação,nem dah para eu ver tudo(o acoplamento aí tah altíssimo…),mas pq vc não grava as linhas(q seria cada IP)num ArrayList igual o brlima faz no tutorial dele…aliás, seria interessante q vc criasse seu TableModel tb…e isolasse um pouco as coisas…

Criado 8 de agosto de 2004
Ultima resposta 11 de ago. de 2004
Respostas 5
Participantes 3