2016-03-23 4 views
1

Ich mache gerade eine Gruppenzuordnung. Eine meiner Aufgaben besteht darin, einen ActionListener zu verwenden, um "Daten" zu JLabels in einer anderen Klasse hinzuzufügen.Wie würde ich einen ActionListener auf einer Schaltfläche verwenden, um JLabels in einer anderen Klasse zu ändern?

Eine andere Person in meiner Gruppe war verantwortlich für die Programmierung der GUI, aber er hat eine sehr schlechte Arbeit damit gemacht, was meine Aufgabe etwas schwieriger machte. Uns wurde beigebracht, MVC-Standards zu praktizieren. Aber ich glaube nicht, dass ich das jetzt richtig machen könnte. Der Code für die GUI ist ein einziger riesiger Code, der über tausend Zeilen lang ist und alle in einer Methode enthalten ist, was es schwierig macht, aufzuräumen, ohne zu viel Zeit zu verschwenden.

Ich habe ActionListeners schon früher benutzt, aber nur in der Praxis und wenn sie alle in einer Klasse sind.

Was ich versuche zu erreichen ist, wenn eine Taste (von der GUI-Klasse) angeklickt wird, wird die actionPerformed-Methode aufrufen Methoden von einer externen JAR-Datei und die JLabels ändern aus zeigt den Text Standard auf die „Daten“ aus den genannten Methoden erhalten.

Im Moment habe ich 6 JLabels mit einem erstellt für Schleife,

int totalLbls = 6; 

    JLabel lbl[] = new JLabel[totalLbls]; 

    for (int j = 0; j <totalLbls;j++){ 

     lbl[j] = new JLabel("default"); 
     pa2.add(lbl[j]); 

Erstens: Wie würde ich jedes Etikett ändern? Anfangs dachte ich darüber nach, es manuell zu tun und es individuell 6 Mal so zu kartieren,

JLabel lb1 = new JLabel(jarname.getData()); 
JLabel lb2 = new JLabel(jarname.getMoreData()); 
. 
. 
. 
JLabel lb6 = new JLabel(jarname.getOtherData()); 

Die Methoden, die String-Werte zurückgegeben werden. Die verwendeten Methoden und der JAR-Dateiname sind nur Platzhalternamen.

Zweitens, wie würde ich über die Implementierung des ActionListener gehen? Ich habe Beispiele gesehen, aber sie verlangen oft, dass wir die MVC-Standards anwenden. Dies bedeutet, dass der Controller sowohl die Ansicht als auch das Modell aufruft. Und in meinem Fall gibt es nur eine wirklich unordentliche Sicht.

Antwort

0

Eine Möglichkeit, dies zu tun, wenn Sie ActionListener nicht in die Hauptklasse implementieren, besteht darin, eine spezifische für diese Schaltfläche festzulegen.

0

Übergeben Sie die Instanz der Klasse, die die JLabels kennt, an die Klasse mit dem Aktionslistener. Zum Beispiel (vereinfachter Zugang zum Beispiel):

public class LabelContainer { // May well extend JPanel or JFrame 
    public JLabel label1 = new JLabel("First"); 
// Plus five more.. 
} 

public class LabelChanger implements ActionListener { // May well extend JButton 
    private LabelContainer labels; 
    public LabelChanger(LabelContainer labels) { 
    this.labels = labels; 
    someWidget.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
    labels.label1.setText("Changed"); 
    // five more... 
    } 
} 
Verwandte Themen