Ablaufsteuerung/Anleitung machen mit JDialog und einer Zustandsmaschine

Jonas1893

Neues Mitglied
In den Klassen FitnessControl und SchellongControl will ich die Methode stateMachine() erstellen (Klasse TestControl ist Überklasse), so dass ein Sblauf über Dialogen für den Benutzer vorgegeben wird. Ich will dann den aktuellen Wert von state abfragen, und dem Label den dazugehörigen Text zuweisen und den Wert von state dann um eins hochzählen. Außerdem will ich für manche Zustände einen Timer benutzen und bei den anderen Zuständen muss der Benutzer den Button weiter drücken. Weiß jemand wie das mit dem Timer geht, ich kenne mich da nicht so aus. Ich weiß nur, dass man den Timer mit Methode setInitialDelay startet, bzw die Länge des Timer-Intervalls bis zum ersten Event in Millisekunden festlegen kann und die Methode start() zum Starten des Timers. Bei Erreichen des letzten Zustands muss der Dialog dann auch geschlossen werden. Den Dialog erstelle ich in einer anderen Klasse, bei Bedarf kann ich noch alle Klassen hochladen (sind aber ziemlich viele).

Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;


import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

@SuppressWarnings("serial")
public abstract class TestControl extends JDialog implements ActionListener
{
    protected int state = 0;
    protected JLabel label;
    protected JButton abbruchButton;
    protected JButton weiterButton;
    protected Timer theTimer;
    
    public TestControl()
    {
        super((JFrame)null,"Test Kontrolle",true);
        setSize(600,600);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        
        // Hinzufügen eines Labels zur Ausgabe der Anweisungstexte
        label = new JLabel();
        label.setPreferredSize(new Dimension(250,200));
        
        // Abbrechen und Weiter Button erstellen
        abbruchButton = new JButton("Abbrechen");
        abbruchButton.addActionListener(this);
        weiterButton = new JButton("Weiter");
        weiterButton.addActionListener(this);
        
        // Timer erstellen mit Action Listener
        ActionListener actionListener = new ActionListener() {

            public void actionPerformed(ActionEvent actionEvent) {
                stateMachine();
            }
        };
        theTimer = new Timer(0, actionListener);
        theTimer.addActionListener(this);
        
        setLayout(new BorderLayout(10, 10));
        setSize(500,500);
        add(label);
        this.add(label,BorderLayout.NORTH);
        add(abbruchButton);
        this.add(abbruchButton,BorderLayout.EAST);
        add(weiterButton);
        this.add(weiterButton,BorderLayout.SOUTH);
    }
    
    //Methoden
    protected abstract void stateMachine();
    
    public void onTimer()
    {
        Toolkit.getDefaultToolkit().beep();
        theTimer.stop();
    }
    
    // Action Listener
    public void actionPerformed(ActionEvent e)
    {
         if(e.getActionCommand().equals("Abbrechen"))
         {
             theTimer.stop();
             System.exit(0);
         }
        
         else if(e.getActionCommand().equals("Weiter"))
         {
             stateMachine();
         }
    }
}

Java:
import javax.swing.JDialog;


@SuppressWarnings("serial")
public class FitnessControl extends TestControl
{
    public FitnessControl()
    {
        super();
        setSize(600,600);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
    
    // Methoden
    protected void stateMachine()
    {
        state = 0;
         switch(state){
            case 0:
                label.setText("<html> Dies ist ein Messgerät zum Messen des Blutdrucks und des Pulses. Sie haben nun einen Fitnesstest angelegt. <br> 1. Drücken Sie nun auf den Knopf 'Messwerte einlesen'. Wenn Sie dies erledigt haben drücken Sie hier auf 'Weiter'.</html>");
                state++;
            case 1:
                label.setText("<html> 2. Nun wird Ihnen in der Mitte des Fensters ein Diagramm angezeigt mit Ihren Messwerten (darin enthalten sind Puls, diastolischer Blutdruck und systolischer Blutdruck). <br>Auf der rechten Seite des Fensters sehen Sie einen Text, in welchem genauer auf die analysierten Messwerte eingegangen wird. </html>");
                state++;
            case 2:
                label.setText("<html> 4. Sie können auch weitere Tests anlegen im Menü unter 'neuen Test anlegen'. Außerdem können Sie unter dem Menüpunkt 'Namen des Tests editieren' <br> den Namen des in der Auswahlbox aktuell ausgewählten Tests ändern. </html>");
                state++;
            case 3:
                label.setText("<html> 5. Es gibt noch 2 Menüpunkte, um die Daten zu speichern und den Test auszudrucken. </html>");
                state++;
            case 4:
                label.setText("<html> 6. Wenn Sie fertig sind können Sie im Menü oder auf den Button 'Anwendung beenden' drücken. </html>");
            }
    }
}

Java:
import javax.swing.JDialog;



@SuppressWarnings("serial")
public class SchellongControl extends TestControl
{
    public SchellongControl()
    {
        super();
        setSize(600,600);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    }
    
    // Methoden
    protected void stateMachine()
    {
        state = 0;
         switch(state){
            case 0:
                label.setText("<html> Dies ist ein Messgerät zum Messen des Blutdrucks und des Pulses. Sie haben nun einen Schellongtest angelegt. <br> 1. Drücken Sie nun auf den Knopf 'Messwerte einlesen'. Wenn Sie dies erledigt haben drücken Sie hier auf 'Weiter'.</html>");
                state++;
            case 1:
                label.setText("<html> 2. Nun wird Ihnen in der Mitte des Fensters ein Diagramm angezeigt mit Ihren Messwerten (darin enthalten sind Puls, diastolischer Blutdruck und systolischer Blutdruck). <br>Auf der rechten Seite des Fensters sehen Sie einen Text, in welchem genauer auf die analysierten Messwerte eingegangen wird. </html>");
                state++;
            case 2:
                label.setText("<html> 4. Sie können auch weitere Tests anlegen im Menü unter 'neuen Test anlegen'. Außerdem können Sie unter dem Menüpunkt 'Namen des Tests editieren' <br> den Namen des in der Auswahlbox aktuell ausgewählten Tests ändern. </html>");
                state++;
            case 3:
                label.setText("<html> 5. Es gibt noch 2 Menüpunkte, um die Daten zu speichern und den Test auszudrucken. </html>");
                state++;
            case 4:
                label.setText("<html> 6. Wenn Sie fertig sind können Sie im Menü oder auf den Button 'Anwendung beenden' drücken. </html>");
            }
    }
}
 

pitsoft21

Mitglied
Hallo, Du erstellst eine Timer instance -die sagt wie oft oder wann etwas passiert.
Dem Timer gibst Du eine Instance von TimerTask mit, die sagt was zu dem Zeitpunkt ausgeführt werden soll. Ob etwas einmal oder mehrmals im gleichen Abstand gerufen wird entscheidet der jeweilige Aufruf von Timer.schedule
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Jigloo browser tutorial - Anleitung unklar AWT, Swing, JavaFX & SWT 4
M JavaFX TableView nur erste Zeile editable machen und gelb markieren AWT, Swing, JavaFX & SWT 0
I Libraries für AWT für andere Grafik-Frameworks tauglich machen AWT, Swing, JavaFX & SWT 6
B Java Projekt mit JavaFX und jfoenix ausführbar machen AWT, Swing, JavaFX & SWT 46
FrittenFritze Text in Flying Saucer selectierbar machen AWT, Swing, JavaFX & SWT 0
L TextArea Zeichenabstand gleich machen AWT, Swing, JavaFX & SWT 8
DonBronson Java Graphics bewegbar machen (Drag&Drop) AWT, Swing, JavaFX & SWT 3
N JavaFX Javafx intelij Projekt zu ausführbaren jar Datei Machen AWT, Swing, JavaFX & SWT 1
CptK Ordentlicher Code & Panel ab bestimmter Komponentenzahl scrollbar machen AWT, Swing, JavaFX & SWT 12
N JavaFX Projekt nachträglich zu JavaFX Application machen? AWT, Swing, JavaFX & SWT 1
O Swing JOptionPane.showOptionDialog - Wie kann ich Buttons größer machen AWT, Swing, JavaFX & SWT 10
L AWT .gif image transparent machen AWT, Swing, JavaFX & SWT 3
VPChief Ein JFrame ohne setUndecorated(true); nicht verschiebbar machen. AWT, Swing, JavaFX & SWT 6
T Java: Zwei abhängige JSlider machen nicht das, was sie sollen AWT, Swing, JavaFX & SWT 4
L JavaFX JavaFX Screenshot Machen AWT, Swing, JavaFX & SWT 6
M JavaFX Ein Labeltext eine zeitlang anzeigen dann weiter machen AWT, Swing, JavaFX & SWT 3
MaxG. JavaFX JavaFX Stage nicht minimierbar machen AWT, Swing, JavaFX & SWT 2
L JavaFX TableView background transparent machen AWT, Swing, JavaFX & SWT 7
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
V JavaFX Teile eines Images Transparent machen AWT, Swing, JavaFX & SWT 4
I JavaFX TreeView Pfeil nicht mehr Klickbar machen AWT, Swing, JavaFX & SWT 1
M JavaFX ImageView lichtundurchlässig machen ? AWT, Swing, JavaFX & SWT 0
P JTextField unsichtbar machen AWT, Swing, JavaFX & SWT 2
Y Kann man Buttons in einem JFrame rund machen ? AWT, Swing, JavaFX & SWT 2
D JavaFX Interface Initializable - Was machen die Parameter in der Methode inizializeable() ? AWT, Swing, JavaFX & SWT 4
J Swing JTable Zeile nicht auswählbar machen AWT, Swing, JavaFX & SWT 0
F Fullscreen rückgänig machen !!! AWT, Swing, JavaFX & SWT 4
F Swing JTextField (unbeschriebbar machen) AWT, Swing, JavaFX & SWT 12
J Swing Graphic anpassbar/resizeable machen AWT, Swing, JavaFX & SWT 10
N Swing Filechooser zweifarbig machen AWT, Swing, JavaFX & SWT 33
T Aus JAVA.Jar GUI eine Flash-Datei machen AWT, Swing, JavaFX & SWT 3
N LookAndFeel Wie kann ich mein eigenes LookAndFeel machen? AWT, Swing, JavaFX & SWT 6
P JScrollBar designen oder unsichtbar machen AWT, Swing, JavaFX & SWT 10
N Swing teilstring in textarea fett machen AWT, Swing, JavaFX & SWT 13
T Jframe Transparent machen AWT, Swing, JavaFX & SWT 3
S Canvas durch transparentes JPanel sichtbar machen AWT, Swing, JavaFX & SWT 2
P jframe setVisible(false) wieder sichtbar machen? AWT, Swing, JavaFX & SWT 4
J Gibt es brauchbare GUI-Builder, oder doch besser alles per Hand machen? AWT, Swing, JavaFX & SWT 6
P Pfeilpolygon per Maus rotierbar machen - Kleine Schwierigkeiten AWT, Swing, JavaFX & SWT 29
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
Java-Insel AWT RadioButtons unauswählbar machen AWT, Swing, JavaFX & SWT 11
lumo AWT Screenshots machen ist langsam? AWT, Swing, JavaFX & SWT 6
P JPanel scrollable machen AWT, Swing, JavaFX & SWT 19
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
R AWT TextArea schreibunfähig machen AWT, Swing, JavaFX & SWT 5
T Swing JScrollBar fetter machen? AWT, Swing, JavaFX & SWT 2
C Etwas durchsichtig machen über einem Panel AWT, Swing, JavaFX & SWT 7
C SWT CTabItem wieder sichtbar machen AWT, Swing, JavaFX & SWT 3
A Swing JCheckbox transparent machen AWT, Swing, JavaFX & SWT 7
A Swing JPanel in JScrollBar scrollbar machen AWT, Swing, JavaFX & SWT 4
A AWT Beim (mehrmaligen) Screenshot machen läuft der Speicher voll AWT, Swing, JavaFX & SWT 2
B RootPane bzw CardLayout Transparent machen AWT, Swing, JavaFX & SWT 7
T JPopup modal machen AWT, Swing, JavaFX & SWT 2
C JTextPane / JEditorPane ohne Keywords farbig machen AWT, Swing, JavaFX & SWT 4
P SWT Viewpart undisposable machen? AWT, Swing, JavaFX & SWT 5
F Swing JFileChooser - Dateinamen nicht editierbar machen AWT, Swing, JavaFX & SWT 8
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
M SWT Tabllenspalte editierbar machen AWT, Swing, JavaFX & SWT 2
S SWT GridLayout scrollbar machen? AWT, Swing, JavaFX & SWT 7
P Swing JList hübscher machen AWT, Swing, JavaFX & SWT 3
D JList Scrollbar machen geht nicht AWT, Swing, JavaFX & SWT 4
B bin am verzweifeln, will auf knopfdruck durch ne überprüfung die labels unsichtbar machen AWT, Swing, JavaFX & SWT 2
S ButtonCelleditor explizit sichtbar machen AWT, Swing, JavaFX & SWT 6
N screenshot machen ohne Robots? AWT, Swing, JavaFX & SWT 9
F Einzelne TreeNode an einem JTree editierbar machen AWT, Swing, JavaFX & SWT 3
E Alles unsichtbar machen AWT, Swing, JavaFX & SWT 12
C Vom User angelegte Spaltenanordung rückgängig machen AWT, Swing, JavaFX & SWT 2
C Swing JTable: Spaltenverschiebung rückgängig machen AWT, Swing, JavaFX & SWT 4
M Swing Docking Widgets selber machen? AWT, Swing, JavaFX & SWT 14
S Spielfeld mit unförmigen Objekten anklickbar machen? AWT, Swing, JavaFX & SWT 4
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
woezelmann JComboBox Item nicht auswählbar machen AWT, Swing, JavaFX & SWT 4
D JTable während edit kein update machen lassen AWT, Swing, JavaFX & SWT 2
Developer_X Swing Graphics2D.zoom, wie rückgängig machen? AWT, Swing, JavaFX & SWT 6
F Screenshot vom Desktop machen? AWT, Swing, JavaFX & SWT 2
F AWT Wie Bild unscharf machen? AWT, Swing, JavaFX & SWT 5
C Swing Mit jTree ein Ordneröffnen Dialog machen? Und Ordner Inhalt auslesen? AWT, Swing, JavaFX & SWT 4
Developer_X Swing Was gegen Flimmern machen? AWT, Swing, JavaFX & SWT 8
E Swing JButton nur pressed machen und Gruppe bilden AWT, Swing, JavaFX & SWT 2
A Swing JTree Editable einzelne Nodes editierbar machen! AWT, Swing, JavaFX & SWT 2
D JWindow rund machen AWT, Swing, JavaFX & SWT 11
J JTable - Spaltenzellen nicht fokusierbar machen AWT, Swing, JavaFX & SWT 15
D JTextArea nicht editierbar machen AWT, Swing, JavaFX & SWT 1
slawaweis JXTreeTable, jede Spalte einzeln scrollbar machen? AWT, Swing, JavaFX & SWT 2
K CheckboxTreeViewer - Ebenen nicht unselektierbar machen AWT, Swing, JavaFX & SWT 2
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
M MVC: Grundidee verstanden aber was machen mit mehreren Model AWT, Swing, JavaFX & SWT 2
J in JTable ganze Spalte editierbar machen AWT, Swing, JavaFX & SWT 17
X in JTable nur einige Zellen editierbar machen AWT, Swing, JavaFX & SWT 2
V JComboBox Eintrag nicht anwählbar machen? AWT, Swing, JavaFX & SWT 3
P JDialog Close-Button inaktiv machen AWT, Swing, JavaFX & SWT 1
K JCheckBox in einer JTable auswählbar machen AWT, Swing, JavaFX & SWT 2
S Wieso Fenster im EDT sichtbar machen? AWT, Swing, JavaFX & SWT 43
D Einzelnen Worte eines Strings farbig machen AWT, Swing, JavaFX & SWT 11
G JList eintrag "nicht anklickbar" machen AWT, Swing, JavaFX & SWT 3
J Eine Spezielle (JTable) Liste, wie kann ich das machen? AWT, Swing, JavaFX & SWT 3
C Wie würdet ihr das machen? JPanel beim Klicken austauschen! AWT, Swing, JavaFX & SWT 4
J Undecorated JXDialog Resizable machen AWT, Swing, JavaFX & SWT 6
S Choice editierbar machen? AWT, Swing, JavaFX & SWT 6
N eine Zeichnung scrollbar machen AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben