Pb JAVA : REPONSE !!!

Fermé
zebiloute Messages postés 105 Date d'inscription mardi 15 janvier 2002 Statut Membre Dernière intervention 14 avril 2005 - 26 févr. 2002 à 11:00
 wafacom - 21 juil. 2008 à 12:35
Il y a une semaine, j'ai poser une question : Comment gérer dynamiquement des composant JAVA.

Hors Pas de réponse à ce jours. Heureusemùent, une âme charitable (Quebecquoise) ma donner la réponse. Donc si cela peut intéresser quelqu'un voici l'exemple pour remplacer dynamiquement un bouton par un autre. Ceci est applicable pour n'importe quel comosant !!!


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

/**
*
* @author Administrateur
* @version
*/
public class AppletTest extends javax.swing.JApplet implements ActionListener{

public AppletTest() {
initComponents();
}

private void initComponents() {
jButton1 = new javax.swing.JButton();

jButton1.setText("jButton1");
jButton1.addActionListener(this);
jButton1.setActionCommand("jButton1 Cliqué");

getContentPane().add(jButton1, java.awt.BorderLayout.NORTH);
}

public void actionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getActionCommand().equals("jButton1 Cliqué")){
// On rend le bouton invisible avant de le detruire
jButton1.setVisible(false);
// laisse le bouton apparent, mais inactif
getContentPane().remove(jButton1);
// On détruire l'instantiation mémoire
jButton1 = null;

jButtonEx = new javax.swing.JButton();
jButtonEx.setText("jButtonEx");
jButtonEx.setBounds(0, 0, 60,30);
getContentPane().add(jButtonEx, java.awt.BorderLayout.SOUTH);

System.out.println(this.getLayout());
}
}

private javax.swing.JButton jButton1;
private javax.swing.JButton jButtonEx;
}

Quand ça veut Po ça veut po !!!
- Et ben y a plus qu'à attendre -
A voir également:

13 réponses

penellope Messages postés 73 Date d'inscription mercredi 2 juillet 2003 Statut Membre Dernière intervention 7 mars 2004 1
1 août 2003 à 08:06
Je voudrais utiliser la methode removeRange de la classe Vector en java mais le compilateur me dit que la methode removeRange est invisible (surement car elle est protected )
Mais comment faire pour la rendre visible
0
Oui j ai consulté le source de la classe Vector la méthode est effectivement protected.

Je ne sais pas pq?
Sinon voici le code source de cette méthode (copier/coller)
protected void removeRange(int fromIndex, int toIndex) {
modCount++;
int numMoved = elementCount - toIndex;
System.arraycopy(elementData, toIndex, elementData, fromIndex,
numMoved);

// Let gc do its work
int newElementCount = elementCount - (toIndex-fromIndex);
while (elementCount != newElementCount)
elementData[--elementCount] = null;
}
0
penellope Messages postés 73 Date d'inscription mercredi 2 juillet 2003 Statut Membre Dernière intervention 7 mars 2004 1
1 août 2003 à 08:49
Tu ne saurais pas par hasard comment je peux l'utiliser? Moi j'ai taper le code suivant
Elements.removeRange(0,x-1);

Elements etant le tableau que je traite

Peut etre faudrait il que je tape moi meme dans mon code celui que tu viens de me donner ?
0
Salut penellope, pour faire plus simple poste ici ton code complet qui pose pb et J essayerai de le corriger et le reposterai ici.
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
penellope Messages postés 73 Date d'inscription mercredi 2 juillet 2003 Statut Membre Dernière intervention 7 mars 2004 1
1 août 2003 à 11:10
Ok je te joins mon code
Je t'ai mis en gras la partie concernant la methode removeRange
Merci d'avance

import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import java.util.Vector;


public class Echo extends DefaultHandler
{
	StringBuffer textBuffer;
	private Vector Elements = new Vector();
	private Vector Levels = new Vector();
	private int levelPrec;
	int compt = 0;
	private int indentLevel = 0;
	int x=1;
	
	public static void main(String argv[])
	{
		if (argv.length != 0) 
		{
			System.err.println("Usage: cmd filename");
			System.exit(1);
		}
		//	Use an instance of ourselves as the SAX event handler
		DefaultHandler handler = new Echo();
		//	Use the default (non-validating) parser
		SAXParserFactory factory = SAXParserFactory.newInstance();
		try
		{
			//	Set up output stream
			out = new OutputStreamWriter(System.out, "UTF8");
			//	Parse the input
			SAXParser saxParser = factory.newSAXParser();
			saxParser.parse("name.xsd", handler );
		} 
		catch (Throwable t)
		{
			t.printStackTrace();
		}
		System.exit(0);
	}
	
	static private Writer out;
	private String indentString = " "; // Amount to indent
	//private int indentLevel = 0;
	
	 
	private void emit(String s)
	throws SAXException
	{
		try
		{
			out.write(s);
			out.flush();
		} 
		catch (IOException e)
		{
			throw new SAXException("I/O error", e);
		}
		
	}
	
		private void nl()throws SAXException
		{
			String lineEnd = System.getProperty("line.separator");
			try
			{
				out.write(lineEnd);
				for (int i=0; i < indentLevel; i++)
				out.write(indentString);
			}
			catch (IOException e)
			{
				throw new SAXException("I/O error", e);
			}
		}
		
		public void startDocument()	throws SAXException
		{
			nl();
			nl();
			emit("\t\tDebut du document");
			nl();			
			emit("<?xml version='1.0' encoding='UTF-8'?>");	
		}
		public void endDocument()
		throws SAXException
		{
			nl();
			emit("\t\tfin du document");
			System.out.println("\n");
			//analyse();
			try
			{
				nl();
				out.flush();
			}
			catch (IOException e)
			{
				throw new SAXException("I/O error", e);
			}
		}
		
		public void startElement(String namespaceURI,
		String sName, 
		String qName, 
		Attributes attrs)
		throws SAXException
		{
			//indentLevel++;
			nl();
			int level;
			emit("ELEMENT: ");
			String eName = sName; // element name
			if ("".equals(eName)) eName = qName; // not namespaceAware
			emit("<"+eName);
			if (attrs != null)
			{
				for (int i = 0; i < attrs.getLength(); i++)
				{
					String aName = attrs.getLocalName(i); // Attr name
					
					if ("".equals(aName)) aName = attrs.getQName(i);
					if (qName.equals("xs:element")|qName.equals("xsd:element"))
					{
						if (aName.equals("name")|aName.equals("ref")){
						nl();
						//indentLevel++;
						emit(" ATTR: ");
						emit(aName);
						emit("\t\"");
						emit(attrs.getValue(i));
					
						
						if(compt == 0)
						{
							SOP("\n==0");
							saveLevel(indentLevel);
							saveElement(attrs.getValue(i));
							writeToFile(attrs.getValue(i),"entete\n");
						}
						if(compt >0)
						{
							saveLevel(indentLevel);
							saveElement(attrs.getValue(i));
							writeToFile(attrs.getValue(i),"entete\n");
							SOP("\n>0");
							
							if(levelPrec==indentLevel-1)
							{
								Elements.removeRange(0,x-1);
								
								SOP("levelPrec==indentLevel-1");
								SOP("--------------------------dans "+Elements.get(levelPrec)+" va s'ecrire "+Elements.get(indentLevel));							
								writeToFile(Elements.get(levelPrec),Elements.get(indentLevel)+"\n");	
								SOP("indent:"+indentLevel+" prec:"+levelPrec);
								x=1;							
							}
							if(levelPrec == indentLevel)
							{
								SOP("levelPrec==indentLevel");
								SOP("--------------------------dans "+Elements.get(levelPrec-1)+" va s'ecrire "+Elements.get(indentLevel+x));
								writeToFile(Elements.get(levelPrec-1),Elements.get(indentLevel+x)+"\n");
								SOP("indent:"+indentLevel+" prec:"+levelPrec);
								x++;
								SOP("x: "+x);
							}
						}
												
						emit("\""+"  indent: "+indentLevel);
						levelPrec=indentLevel;
						indentLevel++;
						compt++;
						}
						
					}
				}
			}
			if (attrs.getLength() > 0) nl();
			emit(">");
			
		}
		
		
		public void endElement(String namespaceURI,
		String sName, // simple name
		String qName // qualified name
		)
		throws SAXException
			{
				String eName=sName;
				nl();
				
				emit("Fin element: ");
				emit("<"+eName+">");
				if (qName.equals("xs:element")|qName.equals("xsd:element"))
				{
				indentLevel--;
				levelPrec=indentLevel;
				}
		}
		
		private void echoText()
		throws SAXException
		{
			nl();
			emit("CHARS:  ");
			String s = ""+textBuffer;
			if (!s.trim().equals("")) emit(s);
		}
		
	
	
	/*Cette methode permet de creer un fichier .xsl(feuille de style )
	d'ecrire a l'interieur toute les données necessaires a son utilisation*/
		public void writeToFile(Object fileName,Object txt)	//write into the correct file
			{
				try	{
						FileWriter fw = new FileWriter(fileName+".xsl",true);
						BufferedWriter bw = new BufferedWriter(fw); 
						bw.write(""+txt);		
						bw.close();		
					}
				catch (IOException e){
					System.out.println("exception"+e);
				}
			}
			
	public void saveElement(String elementSave){
		Elements.addElement(new String(elementSave));
	}
	public void saveLevel(int elementSave){
			Levels.addElement(new Integer(elementSave));
	}

	public void SOP(String s)
	{
		System.out.println(s);
	}
	
	public Vector getElements()
	{
		return Elements;
	}
	
	public Vector getLevels()
	{
		return Levels;
	}
	
	public int getLevelPrec()
	{
		return levelPrec;
	}
	
	
}


0
choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 2 104
1 août 2003 à 12:27
une petite définition de protected??

protected : méthodes, variables (protected n’est pas autorisé pour les classes) déclarées « protected » ne sont accessibles que par les méthodes de la classe et des sous-classe du package de l’objet de défintion.


Chouba
Casque Bleu forumique
0
choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 2 104
1 août 2003 à 12:34
ce qui signifie en fait que cette méthode est utilisée par les autres méthodes de la classe vector et quelle ne peut pas être appelée autrement. Ceci dit tu peux étendre la classe Vector et l'utiliser à ce moment là dans tes méthodes de la sous classe.

Chouba
Casque Bleu forumique
0
Si ell est protected si qu il ya une raison donc on evite le bidouillage.
Et bien tu n as qu a simuler la méthode
Elements.removeRange(0,x-1);
par ceci

//efface depusi deb inclus jusqu à ex exclus

public void removeRange(int deb, int ex)
{
for(int j=deb; j<ex; j++) Elements.removeElementAt(i);
}
Je l ai pass essayé mais je pense que c bon nan?
A+
0
choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 2 104
1 août 2003 à 13:33
une autre solution est de créer un classe MonVecteur avec une methode publique XXX et qui étends vector



public class MonVecteur extends Vector{
    public void nomDeMethode(int x, int y){
         super.removeRange(x,y);

    }
}

Chouba
Casque Bleu forumique
0
j y ai pensé choubaka mais ca me pose 2 question:s
-si elle est protected c pas pour rien don cfaire un extended c un peu bidouiller
-chui meme pas sur que le extende marche car lui appele une méthode protected.. on revient au départ!!
0
choubaka Messages postés 39407 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 9 décembre 2024 2 104
1 août 2003 à 14:40
on ne peut pas appeler ça du bidouillage...

vu que protected peut être utilisé par la sous-classe, donc...
ça reste en interne, l'objet faisant appel à
public void nomDeMethode(int x, int y){


ne sait pas qu'il utilise une méthode protected, pas de prob

Chouba
Casque Bleu forumique
0
penellope Messages postés 73 Date d'inscription mercredi 2 juillet 2003 Statut Membre Dernière intervention 7 mars 2004 1
4 août 2003 à 08:24
Merci pour vos solutions
J'avais deja essayer ta solution choubaka mais comme le disais Omar ca ne marche pas car meme si la methode protected est utilisable dans les sous classe a pparement mon programme ne la voie pas (je ne comprend pad pourqu'oi mais bon...)

Finalement j'ai simuler le fonctionnement de la methode removeRange et ca marche parfaitement bien

Encore merci beaucoup pour votre aide
Penellope
0
j'ai un pb concernant l'utilisation d'une méthode protected de l'interface javax.mail.initernet.MimeMessage
c'est en fait la méthode getContentStream qui pose le problème dans mon programme JSP
veuillez m'aider svp
0