Problème pour récupérer le contenu d'un TextArea et le replacer URGENT !

Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011 - 10 juin 2011 à 09:54
Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011 - 10 juin 2011 à 16:51
Bonjour !

Je débute en JAVA et j'ai quelque problèmes ... Je souhaite créer une barre d'édition de texte et récupérer le texte créer.

J'ai commencer par créer ma barre avec mes boutons. Une fois la barre crée, on crée la zone de texte avec le Bouton "CreerTexte". On écrit notre texte qu'on peut modifier coller etc. Jusque là tout va bien.

Ensuite, je voudrais récupérer le texte créé et le replacer dans une autre zone de texte (aprés avoir fermer la première) PLACER à un endroit différent de la première (au milieu de l'écran par exemple).

Voilà mon problème : je n'arrive pas à créer cette nouvelle fenêtre contenant mon Texte.

Quelqu'un pourrait m'aider ?

Voici mon code complet :

import java.awt.event.*;
import javax.swing.*;
import javax.swing.JPanel;
import java.awt.*;
import java.io.*;
import java.awt.GridBagLayout.*;




public class Notepad extends JFrame implements ActionListener,ItemListener{

/** CONSTRUCTEURS**/

JToolBar barre= new JToolBar();

JButton ouvrir = new JButton("CreerTexte" );
JButton copier = new JButton("CopierTexte" );
JButton couper = new JButton("CouperTexte" );
JButton coller = new JButton("CollerTexte" );
JButton valider = new JButton("ValiderTexte" );

JComboBox police = new JComboBox();
JComboBox style = new JComboBox();
JComboBox taille = new JComboBox();

JPanel edition = new JPanel();
JPanel edition2 = new JPanel();

JScrollPane scroll = new JScrollPane(edition);
File fichier_courant = null;
String police_courante = "Arial";
int style_courant = 0;
int taille_courante = 12;


JTextArea TA = new JTextArea();
Font f;
String TAorig,TAactu;

JTextArea TB = new JTextArea();
Font fb;
String TBorig,TBactu;


public Notepad() {

setSize(600,60);

ouvrir.addActionListener(this);
ouvrir.setActionCommand("CreerTexte" );
copier.addActionListener(this);
copier.setActionCommand("CopierTexte" );
couper.addActionListener(this);
couper.setActionCommand("CouperTexte" );
coller.addActionListener(this);
coller.setActionCommand("CollerTexte" );
valider.addActionListener(this);
valider.setActionCommand("ValiderTexte" );

police.addItemListener(this);
police.addItem("Arial" );
police.addItem("Courier" );
police.addItem("Dialog" );
police.addItem("Times New Roman" );

style.addItemListener(this);
style.addItem("Normal" );
style.addItem("Gras" );
style.addItem("Italique" );
style.addItem("Gras & Italique" );

taille.addItemListener(this);
taille.addItem("12" );
taille.addItem("14" );
taille.addItem("16" );
taille.addItem("18" );
taille.addItem("20" );
taille.addItem("22" );
taille.addItem("24" );
taille.addItem("26" );
taille.addItem("28" );
taille.addItem("36" );
taille.addItem("48" );
taille.addItem("72" );

edition.setFont(new Font(police_courante,style_courant,taille_courante));

barre.add(ouvrir);
barre.add(copier);
barre.add(couper);
barre.add(coller);
barre.add(police);
barre.add(style);
barre.add(taille);
barre.add(valider);

JPanel pane = new JPanel();
BorderLayout bord = new BorderLayout();
pane.setLayout(bord);
pane.add("North",barre);
pane.add("Center", scroll);

setContentPane(pane);
}

public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="CreerTexte" ) {
TA = new JTextArea("", 100, 500);
TA.setEditable(true);
f= new Font( "Arial",Font.PLAIN,10);
TA.setFont(f);
TAorig=TA.getText();
add(TA);
setSize(600,500);
}

else if(e.getActionCommand()=="CopierTexte" ) {
TA.copy();
TA.setCaretPosition(0);
}
else if(e.getActionCommand()=="CouperTexte" ) {
TA.cut();
TA.setCaretPosition(0);
}
else if(e.getActionCommand()=="CollerTexte" ) {
TA.paste();
}
else if(e.getActionCommand()=="ValiderTexte" ) {
String Texte = TA.getText(); /** Récupère le Texte Créé **/

//PARTIE QUI NE FONCTIONNE PAS !!
TA.setVisible(false);
setSize(600,60);


TB = new JTextArea("", 100, 500);
TB.setEditable(true);
fb= new Font( "Arial",Font.PLAIN,10);
TB.setFont(fb);
TBorig=TB.getText();
add(TB);

setSize(600,60);


System.out.println(Texte);






}


}

public void itemStateChanged(ItemEvent e) {
if(e.getSource()==police){
police_courante=e.getItem().toString();
}
else if(e.getSource()==style) {
style_courant=style.getSelectedIndex();
}
else if(e.getSource()==taille){
Integer taille_courante2=new Integer(e.getItem().toString());
taille_courante=taille_courante2.intValue();
}
TA.setFont(new Font(police_courante,style_courant,taille_courante));
}


public static void main(String[] args){
System.out.println("Chargement...");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Erreur --- "+e.toString(),"Erreur",JOptionPane.ERROR_MESSAGE);
}
JFrame frame = new Notepad();

ExitWindow exit=new ExitWindow();
frame.addWindowListener(exit);
frame.show();
}
}

class ExitWindow extends WindowAdapter {
public void windowClosing(WindowEvent e){
System.exit(0);
}
}

12 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 juin 2011 à 10:45
Je retrouve cette question assez souvent sous diverses formes, je vais peut être faire un tutoriel sur la communication et la transmission de paramètres entre les classes un de ces jours.

Tu dois placer le texte à afficher en paramètre du constructeur de la nouvelle classe

public class NouvelleClasse extends JFrame {

   private JTextArea texte;

   public NouvelleClasse(String texte){
      texte = new JTextArea(texte);
      //...
   }

}
0
Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011
10 juin 2011 à 12:11
Euh ... je comprend pas trop. Je dois créer une nouvelle classe pour pouvoir faire ça ?
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 juin 2011 à 13:19
Non, tu peux juste adapter la tienne (je n'ai pas lu ton code)

Tu peux faire deux constructeurs :

public class Classe extends JFrame {

   private JTextArea texte;

   public Classe(String texte){
      texte = new JTextArea(texte);
      //...
   }

   public Classe(){
      this("");
   }

}

0
Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011
10 juin 2011 à 13:58
Je pense avoir compris. Mais en essayant de faire ça cela ne marche toujours pas, il ne m'affiche pas la nouvelle fenêtre qui doit contenir le texte précédent.

J'avais pensé utiliser un GridBagLayout pour cela, ce qui me permettrait en même temps de pouvoir positionner cette nouvelle fenêtre où je veux dans le JPanel mais j'y arrive pas non plus

dsl d'être aussi peu douée (pour ne pas dire carrément nulle !) en java ...
0

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

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 juin 2011 à 14:29
C'est donc pas sur une nouvelle fenêtre que tu veux placer le texte.

Tu ne peux pas utiliser de LayoutManager pour les fenêtres différentes.


Si tu veux que je regarde un peu ton codes postes le moi avec une indentation correcte en utilisant les balises :



Et si tu peux me mettre une image de ton ihm...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 juin 2011 à 14:30
Oui, forcément, les balises ne s'affichent pas voilà comment afficher du code proprement :

[code=java]
//Ce qui tu mets là est colorisé
     Et indenté

/code
0
Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011
10 juin 2011 à 14:49
ok, merci de l'info =)

alors voilà :


import java.awt.event.*;
import javax.swing.*;
import javax.swing.JPanel;
import java.awt.*;
import java.io.*;
import java.awt.GridBagLayout.*;




public class Notepad extends JFrame implements ActionListener,ItemListener{

/** CONSTRUCTEURS**/

JToolBar barre= new JToolBar();

JButton ouvrir = new JButton("CreerTexte" );
JButton copier = new JButton("CopierTexte" );
JButton couper = new JButton("CouperTexte" );
JButton coller = new JButton("CollerTexte" );
JButton valider = new JButton("ValiderTexte" );

JComboBox police = new JComboBox();
JComboBox style = new JComboBox();
JComboBox taille = new JComboBox();

JPanel edition = new JPanel();
JPanel edition2 = new JPanel();

JScrollPane scroll = new JScrollPane(edition);
File fichier_courant = null;
String police_courante = "Arial";
int style_courant = 0;
int taille_courante = 12;


JTextArea TA = new JTextArea();
Font f;
String TAorig,TAactu;

JTextArea TB = new JTextArea();
Font fb;
String TBorig,TBactu;


public Notepad() {

setSize(600,60);

ouvrir.addActionListener(this);
ouvrir.setActionCommand("CreerTexte" );
copier.addActionListener(this);
copier.setActionCommand("CopierTexte" );
couper.addActionListener(this);
couper.setActionCommand("CouperTexte" );
coller.addActionListener(this);
coller.setActionCommand("CollerTexte" );
valider.addActionListener(this);
valider.setActionCommand("ValiderTexte" );

police.addItemListener(this);
police.addItem("Arial" );
police.addItem("Courier" );
police.addItem("Dialog" );
police.addItem("Times New Roman" );

style.addItemListener(this);
style.addItem("Normal" );
style.addItem("Gras" );
style.addItem("Italique" );
style.addItem("Gras & Italique" );

taille.addItemListener(this);
taille.addItem("12" );
taille.addItem("14" );
taille.addItem("16" );
taille.addItem("18" );
taille.addItem("20" );
taille.addItem("22" );
taille.addItem("24" );
taille.addItem("26" );
taille.addItem("28" );
taille.addItem("36" );
taille.addItem("48" );
taille.addItem("72" );

edition.setFont(new Font(police_courante,style_courant,taille_courante));

barre.add(ouvrir);
barre.add(copier);
barre.add(couper);
barre.add(coller);
barre.add(police);
barre.add(style);
barre.add(taille);
barre.add(valider);

JPanel pane = new JPanel();
BorderLayout bord = new BorderLayout();
pane.setLayout(bord);
pane.add("North",barre);
pane.add("Center", scroll);

setContentPane(pane);
}

public void actionPerformed(ActionEvent e) {
if(e.getActionCommand()=="CreerTexte" ) {
TA = new JTextArea("", 100, 500);
TA.setEditable(true);
f= new Font( "Arial",Font.PLAIN,10);
TA.setFont(f);
TAorig=TA.getText();
add(TA);
setSize(600,500);
}

else if(e.getActionCommand()=="CopierTexte" ) {
TA.copy();
TA.setCaretPosition(0);
}
else if(e.getActionCommand()=="CouperTexte" ) {
TA.cut();
TA.setCaretPosition(0);
}
else if(e.getActionCommand()=="CollerTexte" ) {
TA.paste();
}
else if(e.getActionCommand()=="ValiderTexte" ) {
String Texte = TA.getText();


//Texte = TA.getFont(); /** Récupère le Texte Créé **/

TA.setVisible(false);
setSize(600,60);


/* TB = new JTextArea("", 100, 500);
TB.setVisible(true);
TB.setEditable(true);
fb= new Font( "Arial",Font.PLAIN,10);
TB.setFont(fb);
TBorig=TB.getText();
add(TB);
setSize(600,500); */



System.out.println(Texte);

/* GridBagLayout g = new GridBagLayout();
Panel pane = new Panel();
pane.setLayout(g);
GridBagConstraints c = new GridBagConstraints();
JLabel label = new JLabel("Essai");
c.gridx = 154;
c.gridy = 154;
pane.add(label, c); */

System.out.println(Texte+"\n"+"Blala");

/* public void dessiner(Graphics g, JComponent c) {
g.drawRect(0, 0, Math.min(c.getWidth(), c.getHeight())-1, Math.min(c.getWidth(), c.getHeight())-1);
} */



}


}

public void itemStateChanged(ItemEvent e) {
if(e.getSource()==police){
police_courante=e.getItem().toString();
}
else if(e.getSource()==style) {
style_courant=style.getSelectedIndex();
}
else if(e.getSource()==taille){
Integer taille_courante2=new Integer(e.getItem().toString());
taille_courante=taille_courante2.intValue();
}
TA.setFont(new Font(police_courante,style_courant,taille_courante));
}


public static void main(String[] args){
System.out.println("Chargement...");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Erreur --- "+e.toString(),"Erreur",JOptionPane.ERROR_MESSAGE);
}
JFrame frame = new Notepad();

ExitWindow exit=new ExitWindow();
frame.addWindowListener(exit);
frame.show();
}
}

class ExitWindow extends WindowAdapter {
public void windowClosing(WindowEvent e){
System.exit(0);
}
}

0
Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011
10 juin 2011 à 14:51
Mon problème se situe au niveau du bouton "ValiderTexte"
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 juin 2011 à 15:45
Tu veux ouvrir une nouvelle fenêtre ? Je n'ai pas compris ce que tu voulais faire exactement.
0
Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011
10 juin 2011 à 15:53
Oui. En fait, cette barre va être insérer dans une autre interface graphique contenant des fonctions de dessins (tracer des formes, pleines ou seulement contours, etc...) en vue de faire un logiciel de cartes de visite.

Et donc, ce qu'on aimerait, c'est qu'en validant le texte créé, il soit "coller" dans une autre zone qui elle sera déplaçable dans notre zone de dessin (autrement dit la carte) tout en gardant toutes les modifications que nous avons fait sur le texte.

Je sais pas si j'ai été très claire ...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
10 juin 2011 à 16:10
D'accord, ce n'est donc pas exactement la même fenêtre.

Ce que tu peux faire c'est ajouter dans ta classe une méthode editer

public void editerCarte(){
    return new Carte(TB.getText());
}


Avec la classe carte qui contient une JTextArea initialisée avec une chaine de caractères comme ca :

public class Carte extends JFrame {

    private JTextArea texte;

    public Carte(String chaine){
        this.texte = new JTextArea(chaine);
        //Je n'écrit pas tout
    }
}


Dans le bouton valider, tu fais un appel à cette méthode et le tour est joué
0
Hopal Messages postés 9 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 14 juin 2011
10 juin 2011 à 16:51
Merci ! Je pense que c'est une bonne idée et que ça devrais marcher.
Je l'ai testé et pour l'instant ça ne marche pas, mais je pense que ça doit venir de ma classe Carte ...

Merci en tout cas =)
0
Rejoignez-nous