2017-09-23 2 views
0

GUI Débutant ici.Les boutons de l'interface graphique Java n'impriment pas la chaîne à l'interface

Mon problème n'est pas de créer une interface graphique, mais d'avoir les 2 boutons d'impression de la chaîne dans le JTextArea à l'intérieur de l'interface.
Le premier bouton "appris" prend un élément aléatoire du tableau et l'imprime. Le deuxième bouton "clear" est juste censé imprimer une chaîne quand il est pressé J'ai des écouteurs d'action pour les deux boutons, mais je n'arrive toujours pas à l'obtenir.

Merci pour votre temps.

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


public class GUI extends JFrame { 


String [] sentences = {"Random sentence 1", "random sentence 2", "random sentence 3", "random sentence 4", random sentence 5", "random sentence 6"}; 


private Container contents; 
JButton learned = new JButton("Learned"); 
JButton clear = new JButton("Clear"); 
JTextArea clearDisplay; 


public GUI() 
{ 
    super ("GUI"); //title bar text 

    contents = getContentPane(); 
    contents.setLayout(new FlowLayout()); //make buttons appear 

    //set the layout manager 

    //instantiate buttons 
    learned = new JButton("I Learned"); 
    clear = new JButton("Clear"); 

    //add components to window 
    contents.add(learned); 
    contents.add(clear); 



    //instantiate event handler 
    ButtonHandler bh = new ButtonHandler(); 

    //add event handler as listener for both buttons 
    learned.addActionListener (bh); 
    clear.addActionListener(bh); 

    setSize (400, 200); //size of window 
    setVisible (true); //see the window 

    } 


    public class ButtonHandler implements ActionListener 
    { 
    //implement ActionPerformed method 

    public void actionPerformed(ActionEvent e) 
    { 
     Container contentPane = getContentPane(); 
     if (e.getSource() == learned) 
     { 
     String random = (sentances[new Random().nextInt(sentances.length)]); //random from array   
     JTextArea learned = new JTextArea(random); 
     } 
     else if (e.getSource() == clear)   
     { 
      JTextArea clearDisplay = new JTextArea("This is where it will display what I learned. \\nMessage Displayed Here."); 
     } 

    } 

} 

public static void main(String[] args) 
{ 
    GUI basicGui = new GUI(); 
    basicGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //program exits on close        
} 

} 

Répondre

2

Votre problème est ici:

else if (e.getSource() == clear)   
    { 
     JTextArea clearDisplay = new JTextArea("This is where it will display what I learned. \\nMessage Displayed Here."); 
    } 

Vous créez une nouvelle JTextArea qui n'est jamais ajouté à l'interface graphique. vous devriez l'écrire comme ça:

else if (e.getSource() == clear)   
    { 
     clearDisplay = new JTextArea("This is where it will display what I learned. \\nMessage Displayed Here."); 
    } 

Et ajoutez-le à l'interface graphique.

Vous devriez également penser à une approche différente: Créez d'abord le JTextField, ajoutez-le à l'interface graphique, puis changez seulement son texte dans le code ci-dessus.

En outre, vous avez quelques fautes de frappe ici:

String random = (sentances[new Random().nextInt(sentances.length)]); 
+0

................. Bonne réponse –

1

Ne pas créer de nouveaux JTextAreas au sein de votre écouteur d'action. Créez plutôt un JTextArea unique dans le constructeur de l'interface graphique et dans les écouteurs, écrivez simplement le texte approprié dans JTextArea, soit en appelant .setText(...) si vous voulez changer complètement le texte, soit .append(...) si vous voulez ajouter du texte supplémentaire au texte existant.

+0

ajouté public JTextArea textArea = new JTextArea(); au constructeur. et dans la section composants ajoutée contents.add (textArea); Puis les événements d'action ont ajouté textArea.setText (random); et textArea.setText ("This ...."); et il a WROKED! Merci beaucoup! – Mike