2012-11-28 4 views
1

J'ai deux classes GUI (qui restaure mon JFrame principal) et Print class (qui est appelée par JButton sur la classe GUI). Maintenant, sur mon GUI classe j'ai JTextArea et une méthode:Méthode statique pour affecter une variable non statique

void setOutput(String data) 
{ 
    // output is JTextArea 
    output.setText(data); 
} 

Cependant les données sont fournies le Print JFrame où j'ai un JButton avec écouteur d'action:

sizOpt.addActionListener(new ActionListener() 
{  
    @Override 
    public void actionPerformed(ActionEvent event) 
    { 
     // textfield is a JTextField component 
     String data = textfield.getText(); 


     // My problem is here i need to invoke the setOutput 
     // method in GUI to output the string however i cant call that method in 
     // any way but making it static or calling new GUI which will create a new 
     // Instance of GUI class 
     GUI.setOutput(data); 
    } 
}); 
+2

Alors ... quelle est la question? Ah OK désolé vu, mais vraiment vous ne devriez pas mettre votre question réelle dans un commentaire dans l'échantillon de code. –

+0

Désolé pour cela est 5 heures et mes yeux sont en train de se maquiller et mon esprit approche du point de rupture. –

Répondre

2

La réponse: ne pas utiliser quelque chose de statique ici du tout.

La seule chose qui devrait être statique est votre méthode principale, et c'est probablement ça. Si vous devez appeler une méthode sur l'interface graphique, appelez-le sur l' instance de l'interface graphique visualisée, pas comme une méthode statique. Souvent, la partie délicate est d'obtenir cette référence valide, et vous avez raison de ne pas créer un nouvel objet GUI, mais encore une fois, n'essayez pas de faire une solution statique qui ne fonctionne pas. Certains moyens d'obtenir la référence valide sont via un paramètre constructeur ou une méthode setter.

dire,

public class PrintJFrame extends JFrame { 
    private GUI gui; 

    public PrintJFrame(GUI gui) { 
    this.gui = gui; 
    } 

    // ... 
} 

Maintenant dans votre ActionListener vous pouvez appeler une méthode sur la référence GUI correcte tenue par la variable IUG. Nous verrons ensuite pourquoi vous devriez éviter que les classes étendent les JFrames et les composants GUI similaires. Ensuite nous '

+0

Ce que j'avais était dans ma méthode principale qui était dans une classe séparée, j'ai appelé une interface graphique de classe atribute; et en principal j'avais g = new GUI(); alors j'avais une référence de méthode statique (String data) qui appelait g.setOutput (data); et j'ai appelé classe.reference principal dans ma classe d'impression. Cependant, j'aime beaucoup votre approche, donc je vais réécrire car ce n'est pas beaucoup de travail et finira par mieux fonctionner. –

+0

@kellax: content que ça a aidé! –

1

Faire une référence statique à l'instance de votre sous-classe JFrame, avec une méthode d'instance appropriée sur le JFrame pour récupérer le texte.

+0

Ne serait-il pas préférable d'appeler simplement des méthodes appropriées sur des instances non statiques de l'autre classe? –

+0

J'essayais de suggérer des changements minimes au code, mais je pensais qu'il ne serait pas très difficile de faire une référence statique au JFrame. Avoir modifié par réponse. –

Questions connexes