Rechercher : dans
Par :

Naviguer entre les onglets en java

Dernière réponse le 12 nov 2009 à 13:41:42 BenBanana, le 10 nov 2009 à 12:04:59 
 Signaler ce message aux modérateurs

Bonjour,

e crée un petit éditeur de texte pour m'entraîner en java et je rencontre un problème concernant la gestion des onglets.

Je sais créer de nouveaux onglets, je sais ouvrir un fichier qui s'affichera dans le premier onglet que j'ai créé mais je ne sais pas ouvrir un fichier dans le n-ème onglet.

Pour celà il faudrait que je sois capable dans ma fonction ouvrir d'identifier le JTextArea qui est compris dans l'onget actuellement ouvert.

Je suppose qu'il y a tout comme en C++ une méthode en java qui permet de connaître l'onglet actuellement ouvert et surtout d'accèder au JTextArea qu'il contient.

J'ai cherché mais je n'ai pas trouvé.

Merci de votre aide. :-)

Configuration: Linux
Mozilla 1.9.1.5

Meilleures réponses pour « Naviguer entre les onglets en java » dans :
Forcer IE7 à ouvrir toutes les pages dans un nouvel onglet Voir Lorsque vous naviguez sur internet grâce à Internet Explorer 7, vous remarquez que les pages s'ouvrent par défaut dans une nouvelle fenêtre. Pour remédier à cela, et ouvrir dorénavant les pages dans un nouvel onglet, il vous suffit d'effectuer la...
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Je n'arrive plus à naviguer sur Internet ! VoirSi brusquement vous n'arrivez plus à naviguer sur le Web (ou sur certains sites), lisez ceci. I. Vérifier la connexion II. Les spywares III. Les virus IV. Les processus en cours : HijackThis V. Se protéger ! VI. Changer de...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
J2EE - Java 2 Enterprise Edition VoirIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des...

1

choubaka, le 10 nov 2009 à 13:38:57
Répondre à choubaka

2

BenBanana, le 10 nov 2009 à 15:21:22

Salut,

Je suis allé voir ton lien. Ca m'a un peu fait avancer mais je n'arrive toujours pas à résoudre mon problème.

Je n'arrive toujours pas à charger un fichier ouvert par l'utilisateur dans un nouvel onglet.

J'aimerai fait un truc du genre.

onglets.monongletsactuellementouvert.letextededans("Le texte contenu dans le fichier que j'essaie d'ouvrir")

EN tout cas merci pour ton aide.

Répondre à BenBanana

3

choubaka, le 10 nov 2009 à 17:51:57

Tu dois avoir un problème au niveau de tes "listener"
sans code, pas facile de te guider Chouba,
Rhâââgnagna

Répondre à choubaka

4

sandul, le 10 nov 2009 à 18:11:58

Salut,

Tu as un JTabbedPane sur lequel tu disposes tes onglets avec addTab(), right ? Activer un des onglets c'est simple: appelle tonTabbedPane.setSelectedIndex(index). Accéder à un de tes onglets est tout aussi simple: tonTabbedPane.getSelectedIndex() pour accéder au tab actif ou encore tonTabbedPane.getTabComponentAt(index) pour accéder à l'onglet #index.

++ A man would die, though he were neither valiant nor miserable,
only upon a weariness to do the same thing so oft over and over. [Bacon]

Répondre à sandul

5

BenBanana, le 10 nov 2009 à 19:29:37

Voici quelques fragments du code qui devrait vous permettre de voir ce qui ne va pas dans mon programme :


// Déclaration de ma table d'onglets
private JTabbedPane onglets = new JTabbedPane(); 

// Nouveau correspond à un JMenuItem
nouveau.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {

				onglets.add("Onglet", new JTextArea());
				
			}
});



Et donc dans j'essaie à l'aide d'un listener, de charger dans l'onglet courant un fichier stocké sur l'ordinateur.

class actionOuvrir implements ActionListener
	{

		public void actionPerformed(ActionEvent e) {
			
			JFileChooser fileChoose = new JFileChooser();
			fileChoose.setCurrentDirectory(new File("~"));;
			String fichier = null;
			
			int resultatOuvrir = fileChoose.showDialog(fileChoose, new String("Ouvrir"));
			
			if (resultatOuvrir == JFileChooser.APPROVE_OPTION) {
				
				fichier = fileChoose.getSelectedFile().toString();
				
				FileInputStream fis;
				try {
					
					fis = new FileInputStream(fichier);
					 int n;
					   
					   while ((n = fis.available())> 0) {
						   
						   byte[] b = new byte[n];
						   int result = fis.read(b);
					      if (result == -1) break;
					      String s = new String(b);
                                             // Ici la ligne manquante pour  insérer la chaine s dans mon onglet
					      
					   }
					   
				} catch (FileNotFoundException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				} catch (IOException e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}
			}
		}
	}


J'ai essayé d'utiliser onglets.getSelectedIndex() mais celà ne semble pas me laisser la possibilité de modifier le JTextArea (pas d'appel possible de la méthode setText().

En tout cas merci pour votre réactivité.

Répondre à BenBanana

6

sandul, le 10 nov 2009 à 19:36:13

Pas le temps de regarder ton code maintenant, car je dois m'en aller, mais si tu vx accéder à un JTextArea, pourquoi as-tu besoin d'accéder à un tab ?

Tu gardes (par exemple) une liste de JTexteArea (correspondant à ta liste de fichiers ouverts) et tu accèdes à un de ces éléments.

Sinon, si ton JTextArea est vraiment lié à ton onglet: tu crées ta propre classe XXX (qui hérite de ce que tu veux comme composant), tu la construis (graphiquement, si tu veux), tu places un JTextArea dessus et surtout tu la dotes d'un public getMyTextArea() qui te retourne ta zone de saisie. Et tu places dans le JTabbedPanel des instances de ta classe et lorsque tu fais un getSelectedIndex() sur ton JTabbedPane, après un cast vers ta classe maison, tu pourras récupérer la zone de saisie avec ta méthode getMyTextArea...

Bon, têtre expliqué un peu rapdement, mais il faut que je m'en aille. Vais regarder ton code plus tard.

++

Répondre à sandul

7

BenBanana, le 10 nov 2009 à 20:19:23

J'accède à un tab parce que c'est ce qui me parait être le plus naturel. Je me trompe peut-être.

Je pourrai lister les textArea indépendamment des onglets qui les contiennent, c'est vrai.
Mais cela me forcerait à les stocker dans un tableau, et donc dans une structure de taille fini, ce qui rendrait mon programme (encore) moins flexible.

Après peut-être qu'il y a une autre manière de faire qu'en passant par des tableaux mais elle ne m'a pas sauté aux yeux. Dans tous les cas j'aimerai ne pas trop m'écarter de mon idée de départ de lier les tab aux textArea afin de comprendre mes erreurs (sauf si cela s'avère i:mpossible bien évidemment).

En ce qui concerne la solution que tu proposes, je ne suis pas sur de l'avoir bien comprise mais j'ai essayé de la mettre en oeuvre sans succès.

Mon programme bute toujours au même niveau. De plus le cast que tu me suggères de faire apparait comme une erreur.

Voilà en résumé ce que j'avais fait, mais je le répète je ne suis pas sur d'avoir bien compris. ;-)
Quand j'y pense je ne vois pas pourquoi ça fonctionnerait mieux.

-Création d'une classe AIreDeTexte qui hérite de Component possédant juste un attribut de type JTextArea et une méthode d'accès getMyTextArea (qui se contente de renvoyer le JTextArea)
-L'ajout de nouveaux onglets se fait de cette manière : onglets.add("Onglet", new AireDeTexte());
-Le remplissage du textArea se fait : ((AireDeTexte)(onglets.getSelectedIndex())).getMyTextArea().setText("Mon texte"); // L'erreur porte sur le Cast, j'a essayé en trifouillant les paranthèses mais ça ne change rien.

Je vous demande de faire preuve d'indulgence car je n'ai pas une très longue expérience en Java. :-)

Répondre à BenBanana

8

BenBanana, le 11 nov 2009 à 12:42:52

Personne pour m'aider aujourd'hui ?

Répondre à BenBanana

9

sandul, le 11 nov 2009 à 21:57:24

Bonsoir Ben,

Le remplissage du textArea se fait : ((AireDeTexte)(onglets.getSelectedIndex())).getMyTextArea().­setText("Mon texte"); // L'erreur porte sur le Cast, j'a essayé en trifouillant les paranthèses mais ça ne change rien.


C'est normal d'avoir une erreur: getSelectedIndex() te retourne un entier (l'index de l'onglet actif), impossible de le caster vers un objet graphique. getSelectedComponent(), par contre, ferait bien l'affaire.

Je te fais un tit exemple.

++

Répondre à sandul

10

sandul, le 11 nov 2009 à 22:07:29
  • +1

Voici notre tit exemple:

package fonctions;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;

public class BenBanana extends JFrame {
	private static final long serialVersionUID = 1L;

	class MyJTextPane extends JPanel {
		private static final long serialVersionUID = 1L;
		JTextArea ta;

		public MyJTextPane() {
			setLayout(new BorderLayout());
			ta = new JTextArea();
			add(ta, BorderLayout.CENTER);
		}

		public JTextArea getTextArea() {
			return ta;
		}
	}

	public static void main(String[] args) {
		final BenBanana mf = new BenBanana();
		mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mf.setBounds(20, 20, 500, 500);

		mf.setLayout(new BorderLayout());
		final JTabbedPane tabbedPane = new JTabbedPane();
		JPanel p1 = mf.new MyJTextPane();
		JPanel p2 = mf.new MyJTextPane();
		tabbedPane.add("First pane", p1);
		tabbedPane.add("Second one", p2);
		mf.add(tabbedPane, BorderLayout.CENTER);

		JPanel southPane = new JPanel();
		JButton infoBtn = new JButton("Get info");
		infoBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// afficher le contenu du JTextArea actif (1 ou 2)
				BenBanana.MyJTextPane selectedTab = ((BenBanana.MyJTextPane) tabbedPane
						.getSelectedComponent());
				JOptionPane.showMessageDialog(mf, "Current active JTA reads:\n"
						+ selectedTab.getTextArea().getText());
			}
		});
		southPane.add(infoBtn);
		mf.add(southPane, BorderLayout.SOUTH);

		mf.setVisible(true);
	}
}

Enjoy et n'hésite pas de poser des questions au cas où. Ah, concernant ton

Mais cela me forcerait à les stocker dans un tableau, et donc dans une structure de taille fini, ce qui rendrait mon programme (encore) moins flexible.

==> pas obligé d'utiliser un tableau (taille fixe). Tu peux utiliser très bien un List (qui fonctionne de la même manière qu'un vector du STL)

++

Répondre à sandul

11

BenBanana, le 12 nov 2009 à 13:26:26

Yeah ça marche nickel.
J'ai enfin les fichiers qui s'ouvrent dans les bons onglets.

Merci pour le temps passé, les explications et le programme. Je commençais à désespérer.
Je n'ai plus de questions la dessus pour le moment, ton programme est assez clair.

En ce qui concerne le List je ne connaissais pas. Je vais regarder ça de plus près.

A bientôt pour mon prochain problème en Java . ;-)

Répondre à BenBanana

12

 sandul, le 12 nov 2009 à 13:41:42

=) Super.

Tu travailles avec un IDE ? Avec des bouquins ? Avec un but bien précis ?

Répondre à sandul
Collection CommentÇaMarche.net