zurückgeben, einen Variablen Wert an Haupt-auf den button klicken

Möchte ich, dass main drucken soll Hallo (in einem pop-up Dialog box) jedesmal, wenn der button angeklickt wird. So entwarf ich das folgende Programm, aber es scheint nicht zu funktionieren. Das Programm wird kompiliert und ausgeführt Prima, aber wenn ich auf die Schaltfläche klicke, sehe ich nicht die Dialog-box aufspringen. Ich habe die getter und setter der booleschen variable (button_clicked), dessen Wert geprüft wird in der main () - block.
Bitte helfen Sie, wenn Sie wissen..

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class abc extends JFrame implements ActionListener{

boolean button_clicked = false;
JButton b1;

abc(){
    this.setSize (400, 400);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.createUI();
}

void createUI(){
    this.setLayout(null);
    b1 = new JButton("x");
    b1.setSize(110,30);
    b1.setLocation(10,210);
    this.add(b1);

    b1.addActionListener(this);
}

public boolean isButton_clicked() {
    return button_clicked;
}

public void setButton_clicked(boolean button_clicked) {
    this.button_clicked = button_clicked;
}


public void actionPerformed(ActionEvent arg0) {
    button_clicked = true;

    //I don't want to print the dialogue box from here..
    //I want to keep everything under main()'s control.
}

}


public class tempMain extends JFrame {

public static void main(String[] args) {
    abc temp = new abc();
    temp.setVisible(true);
    while(true){
        if(temp.isButton_clicked())
            JOptionPane.showMessageDialog(null, "Hello");
    }
}

}
  • Sie sollten nie mit einer while-Schleife so. Dies hat eine Menge design-Fehler. Deine While-Schleife 1 werden Essen, bis die CPU-denn es schläft nie. Wenn Sie müssen, verwenden Sie eine while-Schleife wie diese dann zumindest stellen es in einen neuen thread und Schlaf den Faden nach jeder iteration. Jedoch ist dies immer noch ein schlechtes design.
  • Warum die Kommentare in Ihrem code? Wenn du gehst, darauf zu bestehen, dass bad-design für Ihr Programm, zumindest rechtfertigen Sie den Grund dafür.
  • Ich vermute, dass der Kommentar ist ein Plädoyer für ein nicht modales Dialogfeld aus, und spielen Sie die PropertyChangeListener Karte.
  • Ihre Vermutung ist genauso gut wie jeder andere, da der ursprüngliche poster scheint nicht preisgeben wollen, die motivation hinter seiner Anfrage.
  • Ich habe meine Beweggründe für solch ein design in einer Antwort unten..
  • Meine app verlangt von mir, dies zu tun. Eigentlich ist der drucken-Dialog-Anweisung war nur ein Haltepunkt, um zu überprüfen, ob die Steuerung wird wieder in Haupt -, unter bestimmten Voraussetzungen, oder nicht. (Die Kontrolle wird wieder an die main aber die button_clicked Wert wird nie 'wahr' oder etwas, was ich Schätze). In das eigentliche Programm, das dialoguebox Linie wird ersetzt mit einem code, der halten muss, das warten auf eine Benutzereingabe. Das ist, warum diese eine Weile verwendet wird. Ich werde versuchen, es umzusetzen in einem anderen thread. Vielen Dank für das heads-up..
  • Ich habe keine Ahnung was das ist.. ich studieren werde, über die es weiter..
  • wenn Sie auf der Suche nach guten modularen Programm-design, der Haupt-Logik und den Status Ihrer Programm sollte nicht einmal in Ihrem GUI-Klassen, sondern in Ihrem Modell-Klassen, wieder eine la MVC als pro meinen anderen Kommentar.
  • Es gibt ein gutes Beispiel von Hovercraft hier, genannt hier.
  • vielen Dank für das Beispiel.. ich denke, dadurch wird mein Leben viel leichter sein, wenn ich es verstehe.
  • Bitte lernen Sie die java Namenskonventionen halten. Und während Sie an zu lernen: nie-immer manuelle Dimensionierung/Anordnung der Komponenten, das ist die exklusive Aufgabe eines geeigneten LayoutManager.
  • was ist, wenn ich will, um die Komponenten zu identifizieren, die als pro mein Wunsch, und nicht eine vordefinierte layout..??
  • Sie wollen nicht, dass immer, auch wenn Sie es noch nicht wissen 🙂 Und selbst wenn Sie es wirklich wollen: schreiben Sie einen LayoutManager, der genau das tut, was Sie wollen.
  • Ich werde beachten Sie, dass!!

InformationsquelleAutor Vivek Sethi | 2012-08-29
Schreibe einen Kommentar