Hallo!
Habe mein derzeitiges GUI-Problem 'mal in einem kleinen einfachen Sourcecode verewigt.
Ich möchte über einen Button eine Schleife auslösen und die Schleife über denselben Button wieder stoppen.
Leider ist das Stoppen oder jede andere Event-Operation nicht mehr möglich, sobald ich die Schleife betreten habe,
da anscheinend die Behandlungsroutinen des Frame nicht mehr behandelt bzw. blockiert werden.
Gibt es eine Anweisung, um innerhalb der Schleife die Applikation daran zu erinnern, auch mal nach neuen Events, wie einem Button-Klick zu fragen?
Wenn nicht, dann kann man das ja nur noch über MultiThreads lösen, allerdings bräuchte ich diese Funktionalität mehrfach und will nicht für jede Schleife einen eigenen Thread erzeugen.
Interessant dabei ist: Sollte die Schleife direkt am Ende des Konstruktors aufgerufen werden, ist der Button zum Stoppen noch voll funktionstüchtig. Aus diesem Grund zweifel ich an der MultiThread-Lösung als einzigste Alternative.
Jedenfalls kann ich mich nicht erinnern, daß ich ein derartiges Problem mal mit der MFC/C++ hatte, die ich sonst (aber zur Zeit garnicht) nutze.
Wie läßt sich das Problem vermeiden?
Danke im Voraus,
Robbson
Habe mein derzeitiges GUI-Problem 'mal in einem kleinen einfachen Sourcecode verewigt.
Ich möchte über einen Button eine Schleife auslösen und die Schleife über denselben Button wieder stoppen.
Leider ist das Stoppen oder jede andere Event-Operation nicht mehr möglich, sobald ich die Schleife betreten habe,
da anscheinend die Behandlungsroutinen des Frame nicht mehr behandelt bzw. blockiert werden.
Gibt es eine Anweisung, um innerhalb der Schleife die Applikation daran zu erinnern, auch mal nach neuen Events, wie einem Button-Klick zu fragen?
Wenn nicht, dann kann man das ja nur noch über MultiThreads lösen, allerdings bräuchte ich diese Funktionalität mehrfach und will nicht für jede Schleife einen eigenen Thread erzeugen.
Interessant dabei ist: Sollte die Schleife direkt am Ende des Konstruktors aufgerufen werden, ist der Button zum Stoppen noch voll funktionstüchtig. Aus diesem Grund zweifel ich an der MultiThread-Lösung als einzigste Alternative.
Jedenfalls kann ich mich nicht erinnern, daß ich ein derartiges Problem mal mit der MFC/C++ hatte, die ich sonst (aber zur Zeit garnicht) nutze.
Wie läßt sich das Problem vermeiden?
Danke im Voraus,
Robbson
Code:
//QUELLCODE:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class GuiTest extends Frame
{
boolean go;
Button button_pause;
public static void main(String[] args)
{
GuiTest myGUI=new GuiTest();
}
public GuiTest()
{
// Frame an Bildschirmgröße anpassen
Dimension screensize=new Dimension();
screensize=Toolkit.getDefaultToolkit().getScreenSize();
setBounds(screensize.width/2-250, screensize.height/2-300, 400, 500);
setResizable(false);
setBackground(Color.darkGray);
setLayout(null);
button_pause=new Button("Los");
button_pause.setBounds(30,400,80,22);
this.add(button_pause);
button_pause.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e)
{
if(go==true)
{
go=false;
button_pause.setLabel("Weiter");
}
else
{
go=true;
button_pause.setLabel("Pause");
Tuwas();
}
}});
// Fenster schließen abfangen
addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent event)
{
setVisible(false);
dispose();
System.exit(0);
}});
setVisible(true);
// Schleife optional von hier aus das erste Mal starten
go=false;
//Tuwas();
}
void Tuwas()
{
int counter=0;
while(go==true)
{
System.out.println("Hallo! "+counter);
try
{
Thread.sleep(100);
}catch (InterruptedException e){}
counter++;
}
}
} // end class