2013-02-20 5 views
2

Iam faire un programme simple où l'utilisateur entre le nom et la description. Si l'utilisateur appuie sur OK, le programme écrira le résultat dans le fichier. Fondamentalement, j'ai 3 classes. Je veux appeler ma class2 de class1 et implémenter la méthode. Je sais comment le faire en une seule classe, mais je voudrais savoir de cette façon aussi. Merci d'avance.Comment appeler la deuxième classe lorsque le bouton est enfoncé?

Le problème est que les entrées ne peuvent pas être ajoutées au fichier. Peut-être ne pas appeler la iam nom de fichier correctement:

if (result == JOptionPane.OK_OPTION){ 

class2 ad = new class2(this); 
    } 

Voici mes 3 classes:

principal

public class mainclass { 
    public static void main(String[] args) { 
     class1 a = new class1(); 
    } 
} 

Class1

import javax.swing.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import javax.swing.table.*; 
import java.util.*; 

public class class1{ 

final JTextField field1 = new JTextField(10); 
final JTextField field2 = new JTextField(10); 
JPanel panel = new JPanel(); 

public class1() { 

     panel.add(new JLabel("Name:")); 
     panel.add(field1); 
     panel.setLayout(new GridLayout(5,2)); 
     panel.add(new JLabel("Description:")); 
     panel.add(field2); 

     int result = JOptionPane.showConfirmDialog(null, panel,"Enter Information", JOptionPane.OK_CANCEL_OPTION); 

     if (result == JOptionPane.OK_OPTION) { 
      class2 ad = new class2(); 
     } 
    } 
} 

Class2

import javax.swing.*; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import javax.swing.table.*; 
import java.util.*; 

public class class2 { 

    class1 a; 

    public class2(class1 a) { 

     this.a = a; 

     a = new class1(); 

     BufferedWriter writer = null; 

     try { 

      writer = new BufferedWriter(new FileWriter("file.txt", true)); 

      String add1 = a.field1.getText(); 
      String add2 = a.field2.getText(); 

      writer.write(add1); 
      writer.write("\t"); 
      writer.write(add2); 
      writer.write("\t"); 

     } catch (IOException e) { 

     } finally { 
      try { 
      if (writer != null) 
       writer.close(); 
      } catch (IOException e) { 
      } 
     }  
    } 
} 
+0

Veuillez taguer votre question. – meagar

+1

'" Le problème "' - quel est le problème avec? Un message d'erreur? – Dukeling

+0

Oui. les entrées ne peuvent pas être ajoutées au fichier. – Ramal

Répondre

2

La ligne a = new class1() dans class2 crée une instance différente de celle créée dans mainclass. Au lieu de cela, passez une référence à class1 à votre constructeur class2.

if (result == JOptionPane.OK_OPTION) { 
    class2 ad = new class2(this); 
} 
... 
public class2(class1 a) { 
    //a = new class1(); 
    this.a = a; 
    ... 
} 
+0

je l'ai fait, mais rien n'a été ajouté au fichier. – Ramal

+0

Ça a marché pour moi quand je l'ai essayé à nouveau. En fait, j'ai vu les caractères de tabulation supplémentaires d'une exécution précédente (échouée). Vous voudrez peut-être modifier votre question pour montrer votre approche actuelle. – trashgod

+0

OK, je l'ai édité. – Ramal

2

C'est un problème.

Le constructeur de class1 crée une instance de class2 ici:

class2 ad = new class2(); 

qui appelle le constructeur de class2.

Ce qui crée une instance de class1 ici:

a = new class1(); 

qui appelle le constructeur de class1.

Ce qui vous invite à nouveau.

Donc, vous obtenez seulement au reste du constructeur de class2 après la deuxième invite (si vous annulez).

+0

Alors pourriez-vous s'il vous plaît me dire la bonne façon d'appeler la deuxième classe? – Ramal

+0

@DamBokser Pourquoi est-ce même dans une classe, pourquoi ne pas en faire une méthode dans 'class1'? – Dukeling

+0

parce que je sais comment le faire dans la même classe. Je voudrais apprendre à appeler des méthodes d'autres classes. – Ramal

Questions connexes