BlueJ warte bis Taste Gedrückt?BlueJ Warten?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

In BlueJ musst du wohl eine Verzögerung in die While-Schleife einbauen, weil leere Schleifen Java unheimlich auf die Nerven gehen.

Wenn du ECHTES Java programmieren würdest, könntest du sogenannte keyListener verwenden. Die rufen sofort deine Methoden auf, wenn jemand eine Taste drückt.

Das kombiniert mit der Suspend-Funktion von Thread lässt dich sowas auch in deinem Hauptprogramm machen.

Tarzan2108 
Fragesteller
 16.01.2018, 22:49

also muss ich in die while schleife ein Sys.warte () oder so einbauen?

0
Tarzan2108 
Fragesteller
 17.01.2018, 19:25
Falls Jemand diese Frage im Nachhinein ließt ist hier meine Lösung die mit BlueJ und der Bibliothek GLOOP(Wahrscheinlich sogar ohne) Funktioniert:
while(!tastatur.enter() )
{
    Sys.warte(1);
}

Sollte man verschiedene anfragen mit der gleichen Taste bestätigen will, sollte man es wie folgt machen da sonst mit einem druck möglicherweise mehrere Aktionen ausgeführt werden:

  while(!tastatur.enter() )    //Hier wartet das Programm auf das Drücken der
                                 Entertaste.
  {
      Sys.warte(1);
  }
  while(tastatur.enter() )    //Hier wartet das Programm auf das loslassen 
                                der Entertaste.
  {
      Sys.warte(1);
  }

Es ist zwar lang, aber Funktioniert bei mir immer zuverlässig und klappt auch ohne andere Bibliotheken.

Ich hoffe ich konnte hiermit noch jemandem helfen ^^

0
PerfectMuffin  17.01.2018, 20:47
@Tarzan2108

Eine Sache mißverstehst du.

GLOOP IST eine externe Bibliothek, die nur ein Bruchteil von Javaentwicklern benutzen würde.

KeyListener sind Bestandteil der JavaSE-API die jeder, der Java installiert hat, zwangsläufig haben muss.

0

Das Warten oder die Nutzung von Schleifen ist sehr ineffizient und unsauber. Nutze stattdessen Listener, in diesem Fall den KeyListener. Der minimale Code für Swing sieht beispielsweise folgendermaßen aus:

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

// Klasse muss Listener implementieren
public class Test extends JFrame implements KeyListener {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test test = new Test();
                    test.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Test() {
        setSize(500, 500);
        // Listener hinzufügen
        addKeyListener(this);
    }

    // Die folgenden drei Methoden müssen in der Klasse
    // implementiert werden
    @Override
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
            JOptionPane.showMessageDialog(null, "Enter wurde gedrückt!");
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {}
    @Override
    public void keyReleased(KeyEvent e) {}
}

Stattdessen ist die Nutzung von anonymen Listenern ebenfalls eine korrekte Schreibweise:

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class Test extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Test test = new Test();
                    test.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public Test() {
        setSize(500, 500);
        // Listener hinzufügen
        addKeyListener(new KeyListener() {
            @Override
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                    JOptionPane.showMessageDialog(null, "Enter wurde gedrückt!");
                }
            }

            @Override
            public void keyTyped(KeyEvent e) {}
            @Override
            public void keyReleased(KeyEvent e) {}
        });
    }
}
Tarzan2108 
Fragesteller
 16.01.2018, 22:59

ehrlich gesagz hab ich kein plan von irgendwelchen listenern und wir dürfen auch nur mit gloop arbeiten...😅

0
PerfectMuffin  16.01.2018, 23:05
@Tarzan2108

Ist halt nur BlueJ. Listener sind Funktionen die aufgerufen werden, wenn etwas passiert, in diesem Fall ein KeyListener wenn man mit Fokus auf ein UI-Element eine Taste drückt.

Würde man machen, wnen man eine AWT-basiertes UI macht.

BlueJ basiert soweit ich weiß auf AWT, aber trotzdem sollte man hier wohl bei BlueJ-Lösungen bleiben.

0
tavkomann  16.01.2018, 23:11
@PerfectMuffin

Mit BlueJ lassen sich auch Swing- und AWT-Anwendungen entwickeln. Er verwendet aber leider GLOOP. Ich habe mir gerade mal die Dokumentation davon angesehen. Von Listenern ist dort keine Rede, also bleibt wohl nur die unschöne Möglichkeit, eine Schleife zu verwenden...

1
Tarzan2108 
Fragesteller
 16.01.2018, 22:59

trotzdem danke für die mühe👌

0