Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1772 connectés 

 


Dernière réponse
Sujet : [JAVA] JInternalFrame JTextArea
JeromeV La fenetre ne doit pas simplement conserver son contenu mais continuer à recevoir ce qui se passe sur le chan meme qd il n'est pas actif !
 
A mon avis, si tu ne souaite pas afficher plusieurs chan en meme temps, l'ideal est de ne gerer qu'une seule fentre avec un seul textfield et un seul textarea et de changer leur contenu au changement de chan.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
JeromeV La fenetre ne doit pas simplement conserver son contenu mais continuer à recevoir ce qui se passe sur le chan meme qd il n'est pas actif !
 
A mon avis, si tu ne souaite pas afficher plusieurs chan en meme temps, l'ideal est de ne gerer qu'une seule fentre avec un seul textfield et un seul textarea et de changer leur contenu au changement de chan.
scaldan bien merci,
 
je pense faire dans ce cas une liste chainée ou une ArrayList.
Mais cela risque de pas mal bouffer de mémoire. Je vais chercher un peu des chats en open source pour voir la facon dont ils s'y prennent. Si je trouve la solution à mon problème je poste la solution.
petoulachi bin vouais, un attribut de la classe en String... variable "globale" quoi  ;)
darklord la solution la plus propre c'est que le composant garde son état. Ce n'est pas normal qu'il perde ses données lorqu'il n'a plus le focus !
petoulachi ha oui et puis oublie les fichiers, ça sera trop lent
petoulachi bon j'ai eu la flemme de lire le code.
 
Mais sinon, pour ton texte, met le dans une variable globale. ça peut etre un String, ou peut etre plus optimisé... (a tester). Et donc, des que ta fenetre reprend le focus, tu met ta variable globale dedans (methode setText() si g bonne memoire). ET qd l'utilisateur tape un new msg (donc evenement dans ton JTextField), tu met a jours la variable globale et tu refet un setText() sur le JTextArea.
 
Et puis il faut penser a limiter la taille de ta variable globale qd meme ....
scaldan package Chat;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.GridBagLayout;
import java.awt.event.*;
import java.io.*;
import java.util.*;
 
class FenetreClient extends JFrame implements ActionListener, FocusListener
{        
    private JMenuBar        menuBar;
    private JMenu           file;  
    private JMenuItem       exit, connectServer, joinChanel;
    private LunchServer     lunch;    
    private String          contenuMessage;            
    private JTextField      entree, dialogue;
    private JDesktopPane    desktop;
    private ArrayList       arrayList;
 
    public FenetreClient()  
    {
        super("client chat" );        
        setSize(800, 600);  
        //setResizable(false);        
        /* création des differents menus */
        /********************************/
        menuBar = new JMenuBar();
        setJMenuBar(menuBar);        
        file = new JMenu("File" );
        menuBar.add(file);              
        connectServer = new JMenuItem("connect server" );
        file.add(connectServer);
        connectServer.setEnabled(true);
        connectServer.addActionListener(this);        
        joinChanel = new JMenuItem("join chanel" );
        file.add(joinChanel);
        joinChanel.setEnabled(false);
        joinChanel.addActionListener(this);        
        exit = new JMenuItem("exit" );
        file.add(exit);
        exit.addActionListener(this);                        
        arrayList = new ArrayList();        
        /* création de la frame principale pour supporter les
 internes */        /***************************************************************/
        desktop = new JDesktopPane();
        Container contenu = getContentPane();
        contenu.add(desktop);                                
    }                
    public void actionPerformed(ActionEvent actionEvent)
    {
        if (actionEvent.getSource() == exit)
            System.exit(0);        
        if (actionEvent.getSource() == connectServer)
        {
            connectServer.setEnabled(false);                
            joinChanel.setEnabled(true);            
        }          
        if (actionEvent.getSource() == joinChanel)        
{            
String txtChanel = JOptionPane.showInputDialog(null, "Nom du Chanel à rejoindre ou créer" );
            if (txtChanel != null)
            {
               CreationChanel creationChanel = new CreationChanel(txtChanel, desktop);
               arrayList.add(creationChanel);
            }
        }
    }            
    public void focusGained(FocusEvent focusEvent)      
{    }        
public void focusLost(FocusEvent focusEvent)      
{                
               contenuMessage = new String(entree.getText());        
                             dialogue.setText(contenuMessage);              
    }        
}
/* gestion des fenetres non modales */
class CreationChanel extends JFrame implements ActionListener, FocusListener
{
    private JTextField              entree;
    private JTextArea               dialogue;
    private String     newline = "\n";        
public CreationChanel(String titre, JDesktopPane desktop)    
{
        /* création de frame internes pour les chanels de dialog */
        /*********************************************************/        
                JInternalFrame jInternalFrame = new JInternalFrame(titre, true, true); // resizable, closable        jInternalFrame.setBounds(10, 10, 300, 200);                dialogue = new JTextArea();
        dialogue.setEditable(false);
        dialogue.setLineWrap(true);
        dialogue.setWrapStyleWord(true);
        JScrollPane jScrollPane = new JScrollPane(dialogue);  
        // force l'affichage de la barre de defilement
        jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);        
        entree = new JTextField();        
        entree.setColumns(100);        
        // layout concernant l'internal frame        
        Container container = jInternalFrame.getContentPane();
        container.setLayout(new GridBagLayout());  
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.weighty = 0.9; /* ampleur du composant par rapport aux autres composants (ici 90% de la place)        */
constraints.weightx = 1.0; // ampleur du composant        constraints.gridx = 0; // position verticale        constraints.gridy = 0; // position horizontale        constraints.fill = GridBagConstraints.BOTH;        //container.add(dialogue, constraints);        container.add(jScrollPane, constraints);        
        constraints.weighty = 0.1; // ampleur du composant        constraints.gridy = 1;    
    constraints.fill = GridBagConstraints.BOTH;        
        container.add(entree, constraints);  
        entree.addFocusListener(this);
        entree.addActionListener(this);                
        desktop.add(jInternalFrame, 0);                                                
        jInternalFrame.setVisible(true);                  
        try        
{            
jInternalFrame.setSelected(true);        
}        catch(java.beans.PropertyVetoException ex){}
    }    
    public void actionPerformed(ActionEvent actionEvent)    
{        if (actionEvent.getSource() == entree)        
{            if ((entree.getText()).length() != 0)
            {
                dialogue.append(entree.getText()+newline);
                //dialogue.add(newline);
                entree.setText("" );          
  }
        }
    }
        public void focusLost(FocusEvent focusEvent)      
{        if (focusEvent.getSource() == entree)
        {
            String contenu = entree.getText();
            dialogue.setText(contenu);            
        }            
    }      
   public void focusGained(FocusEvent focusEvent)      
{    
}    
}
public class IGClient
{    
public static void main (String [] args)
    {
        FenetreClient fenetreClient = new FenetreClient();
        fenetreClient.setVisible(true);
        fenetreClient.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
    }
}
 
voila le code c'est un peu plus simple à comprendre.
 
soyez indulgent cela fait peu que je pratique le java
:jap:
darklord bin ca c'est vraiment bizarre !!!
scaldan bien, comme sous mirc quand tu passes d'un channel à un autre, et bien le texte reste dans chaque fenetre. Moi quand je passe d'un channel à un autre le texte ne reste pas dans mon channel precedent. Quand je dis channel, c'est une JInternalFrame séparée en 2 avec en haut un JTextArea et en bas un JTextField.
darklord pas clair. Comprends pas pq tu veux passer d'une fenetre a une autre et pq tu dois garder le texte

 

[jfdsdjhfuetppo]--Message édité par DarkLord--[/jfdsdjhfuetppo]

scaldan voila,
 
j'effectue un chat en swing et pour les differents chanel j'utitlise des JInternalFrame. Ceux-ci sont composés de JTextArea pour afficher les dialogues et d'un JTextField pour entrer son texte. Mon problème est que je ne retiens pas le texte d'une fenetre à une autre et lorsque je passe d'une JInternalFrame à une autre mon texte de la precedente disparait.
Je n'ai effectué aucune operation pour garder le texte dans les JTextArea et je desirerai savoir quelles sont les solutions envisagées ?
 
liste chainées, fichier, ou autre méthode que je ne connais pas et qui est associée aux JTextArea
 
si je ne suis pas très clair dites le moi :hello:

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR