Listener Probleme

c0met

Neues Mitglied
Hallo,
ich habe eine GUI programmiert, die den Verlauf eines geworfenes Balls darstellt (Schräger Wurf)
Nun möchte ich aber mit Listenern arbeiten, dass z.b. bei einer Taste die Kurve auf der Zeichenfläche erschein etc...
Da treten 2 Probleme auf:
1) beim Action Listener führt er zwar die ganzen Berechnungen durch, aber zeichnet nur zum Schluss das Endbild und nicht den Verlauf wie beim Start
2) der KeyListener funktioniert gar nicht, habe da schon diverse Implementierungen durchgekaut...

Danke für eure Hilfe

Hier mein Code der Hauptklasse:
Java:
public class Simulation extends JFrame implements ActionListener{
    private JButton bt_del,bt_start;
    private JSpinner sp_geschw, sp_winkel, sp_ahoehe;
    private JPanel pn_oben, pn_unten;
    private MyJPanel pn_ball;
    private Ball ball;
    private JFrame f;
    private Ballwurfmaschine bmaschine;
    private ArrayList<Point2D.Double> points;
    private final int BREITE = 400,HOEHE = 300;
    private final double faktor = BREITE *0.01;
    
    class MyKeyListener extends KeyAdapter {
        @Override
        public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() != KeyEvent.VK_W) {
            System.out.println("Test");
            setVisible(false);
            dispose();
            System.exit(0);
            }
        }
    }

    public Simulation(Ballwurfmaschine m){
        super("Demo");
        bmaschine = m;
        ball = m.getBall();
        points = bmaschine.getTable();
        
        /**************************************************************
         *                        Frame einrichten                                                              *
         * ************************************************************/

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new FlowLayout());
        setSize(650,400);
        addKeyListener(new MyKeyListener());

        pn_oben = new JPanel();
        pn_unten = new JPanel();

        SpinnerNumberModel m_geschw = new SpinnerNumberModel(30,0,500,0.5);
        SpinnerNumberModel m_winkel = new SpinnerNumberModel(45,0,360,0.5);
        SpinnerNumberModel m_hoehe = new SpinnerNumberModel(0,0,500,0.5);
        sp_geschw = new JSpinner(m_geschw);
        sp_winkel = new JSpinner(m_winkel);
        sp_ahoehe = new JSpinner(m_hoehe);

        bt_start = new JButton("Start");
        bt_start.setActionCommand("starten");
        bt_start.addActionListener(this);
        bt_del = new JButton("Neu");
        bt_del.setActionCommand("loeschen");
        bt_del.addActionListener(this);

        pn_oben.add(new JLabel("Starthöhe:"));
        pn_oben.add(sp_ahoehe);
        pn_oben.add(new JLabel("Startgeschwindigkeit:"));
        pn_oben.add(sp_geschw);
        pn_oben.add(new JLabel("Winkel:"));
        pn_oben.add(sp_winkel);
        pn_oben.add(bt_start);
        pn_oben.add(bt_del);

        pn_ball = new MyJPanel(BREITE, HOEHE, bmaschine);

        pn_ball.setPreferredSize(new Dimension(BREITE, HOEHE));
        
        pn_unten.add(pn_ball);

        add(pn_oben);
        add(pn_unten);
        setVisible(true);

        zeichnen();
    }
        /**************************************************************
         *                        Die Listener                                                                     *
         * ************************************************************/
        //Action-Listener
        public void actionPerformed(ActionEvent e){
                Object obj = e.getSource();
                if (obj instanceof JButton){
                    String cmd = e.getActionCommand();
                    if (cmd.equals("starten")){
                        double winkel = (Double) sp_winkel.getValue();
                        double ahoehe = (Double) sp_ahoehe.getValue();
                        double v0 = (Double) sp_geschw.getValue();
                        ball.setStartY(ahoehe);
                        bmaschine.setWinkel(winkel);
                        bmaschine.setV0(v0);

                        bmaschine.berechnePos();

                        zeichnen();
                        bmaschine.ausgabe();
                    }
                    else if (cmd.equals("loeschen")){
                        System.out.println("Test");
                        pn_ball.removeAll();
                    }
                }
        }

   public void zeichnen(){
        for (Point2D.Double p : points){
            ball.setPosX(p.x*faktor);
            ball.setPosY(p.y*faktor);
            pn_ball.repaint();
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {}
        }
   }
  
public static void main(String[] args) {
        double v0 = 30;
        double winkel = 65;

        Ball ball = new Ball(0,10);
        Ballwurfmaschine maschine = new Ballwurfmaschine (ball, v0, winkel);
        maschine.berechnePos();
        new Simulation(maschine);
        maschine.ausgabe();
    }    
}
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
die Aktion des ActionListeners muss in einen Thread gestartet werden,

und den KeyListener solltest du einem der Panel zuordnen, welches dann den Focus braucht:
panel.requestFocus();

sobald du aber irgendeinen Button drückst, wird der den Focus erhalten, auf alle Buttons dann evtl. auch denselben KeyListener usw.,
wenn einer der Buttons den anfangs Focus hat, kann man sich panel.requestFocus(); dann vielleicht sparen

oder sauberer auf dem JFrame mit KeyBindings arbeiten
How to Use Key Bindings (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Other Swing Features)
 
F

fruchtstern

Gast
Ok, erst einmal Danke für die schnelle Antwort :)

mit dem requestFocus() auf einem Panel habe ich versucht, jedoch bekommt trotzdem der Button den Focus....
Wenn ich diesen zu dem KeyListener adde, dann geht das soweit....

Mit dem Thread habe ich nicht ganz verstanden...
Wie kann ich den ActionListener einem Thread zuordnen? Eine neue Klasse die von Thread erbt und darein den ActionListener? Dann kann ich aber nicht auf den Button zugreifen...
 
F

fruchtstern

Gast
EDIT: das mit dem request funktioniert nun :)
aber mit dem Thread bin ich immer noch nicht wirklich schlauer :/
 
S

SlaterB

Gast
ob neue Klassen oder wer wo wann ist ganz egal, du kannst auch direkt im Code einen Thread starten

Befehl1;
Befehl2;
starte Thread X;
Befehl4; // kommt sofort danach dran, egal wie lange X braucht

wie man einen Thread startet natürlich nachlesen
 
F

fruchtstern

Gast
ja threads starte ich, indem ich die start methode aufrufe. Diese ruft dann die run auf...
Ich habe das so verstanden:
Java:
public void run(){
        double winkel = (Double) sp_winkel.getValue();
                double ahoehe = (Double) sp_ahoehe.getValue();
                double v0 = (Double) sp_geschw.getValue();
                ball.setStartY(ahoehe);
                bmaschine.setWinkel(winkel);
                bmaschine.setV0(v0);

                bmaschine.berechnePos();
                zeichnen();
                bmaschine.ausgabe();

 public void actionPerformed(ActionEvent e) {
        Object obj = e.getSource();
        if (obj instanceof JButton) {
            String cmd = e.getActionCommand();
            if (cmd.equals("starten")) {
                start();
            } else if (cmd.equals("loeschen")) {
                System.out.println("Test");
            }
        }
    }

Und in der actionPerformed() methode sollich dann die start-methode aufrufen?
Doch die Klasse muss doch dann von Threads erben bzw Runnable implementieren, doch das bringt nicht viel...
ich glaube, ich steh auf dem Schlauch :/
 
S

SlaterB

Gast
jeden Thread kann man nur einmal starten, insofern ist ein eigenes Objekt als Listener, den man vielleicht mehrfach drückt, etwas knapp,
aber könnte schon mindestens einmal gehen wenn du von Thread erbst, was du hier nicht zeigst,

ansonsten ganz einfach
Runnable r = new Runnable() {
public void run() {
// Code
}
}
new Thread(r).start();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Probleme Action Listener Taschenrechner AWT, Swing, JavaFX & SWT 27
B Probleme bei der dynamischen JCombobox-Einträge und Listener AWT, Swing, JavaFX & SWT 2
K Probleme mit Listener für JTree AWT, Swing, JavaFX & SWT 4
padde479 MenuItem MouseEvent/-Listener AWT, Swing, JavaFX & SWT 5
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G listener repaint() - verschiedene Darstellung AWT, Swing, JavaFX & SWT 24
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
K Warum genau hat man einen Listener, dann ein Event und was ist ein Adapter AWT, Swing, JavaFX & SWT 2
J Key-Listener in Java AWT, Swing, JavaFX & SWT 37
S JavaFX - mit Listener Veränderungen in einer TableView abhören AWT, Swing, JavaFX & SWT 3
N JavaFX 1 Listener für mehrere ChoiceBoxen AWT, Swing, JavaFX & SWT 3
M List Listener AWT, Swing, JavaFX & SWT 37
I AWT Listener während man in anderem Fenster ist AWT, Swing, JavaFX & SWT 4
U Funktionsweise Listener AWT, Swing, JavaFX & SWT 1
L TextField Listener AWT, Swing, JavaFX & SWT 13
K Nullpointer Combobox Listener AWT, Swing, JavaFX & SWT 2
L JavaFX Image im ImageView auf Scroll Listener reagieren AWT, Swing, JavaFX & SWT 5
Salo JTabel Selection listener Bsp. AWT, Swing, JavaFX & SWT 5
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
J Action Listener Rückgabewert AWT, Swing, JavaFX & SWT 14
MaxG. Swing JMenu einen Listener Hinzufügen AWT, Swing, JavaFX & SWT 25
L JavaFX Verbindung zwischen Beschreibung und Listener (Codebehind Klasse) AWT, Swing, JavaFX & SWT 4
T Swing Methode in Listener aufrufen AWT, Swing, JavaFX & SWT 3
S Swing Tabellen - Listener & richtige Row AWT, Swing, JavaFX & SWT 3
J Java -8 Action Listener für mehrere Buttons AWT, Swing, JavaFX & SWT 9
S Erste Schritte mit GUI - Fileverarbeitung, Listener,... AWT, Swing, JavaFX & SWT 10
M JButton - Listener AWT, Swing, JavaFX & SWT 1
R Swing Mehrere JTextFields mit einem Document Listener AWT, Swing, JavaFX & SWT 2
K JavaFX Focus Listener für gesamte Scene AWT, Swing, JavaFX & SWT 1
M Key Listener reagiert nicht AWT, Swing, JavaFX & SWT 4
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
M Listener funktioniert nicht AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
elischa JFrame über mehrere JPanel und Listener AWT, Swing, JavaFX & SWT 17
llabusch Event Handling Listener spielt verrückt AWT, Swing, JavaFX & SWT 8
kaoZ Swing Architektonisches Problem / Listener / MVC AWT, Swing, JavaFX & SWT 14
H org.eclipse.swt.widgets.Scale MouseRelease listener AWT, Swing, JavaFX & SWT 1
MaDDin-94 Swing Listener reagiert nicht immer AWT, Swing, JavaFX & SWT 2
A JLabel im Listener färben AWT, Swing, JavaFX & SWT 11
M Key-,... Listener funktioniert nicht immer AWT, Swing, JavaFX & SWT 2
P Event Handling Listener beim öffnen von einem JPopupMenu AWT, Swing, JavaFX & SWT 3
A Listener für JGTextField AWT, Swing, JavaFX & SWT 2
J Programmierstil: Kommunikation Listener und GUI AWT, Swing, JavaFX & SWT 3
B JTable Renderer / Listener AWT, Swing, JavaFX & SWT 7
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
E Listener AWT, Swing, JavaFX & SWT 3
M SWING Listener ohne Wirkung AWT, Swing, JavaFX & SWT 2
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
P JPanel- Listener durch JTextArea aktivieren AWT, Swing, JavaFX & SWT 8
J Swing dragging listener AWT, Swing, JavaFX & SWT 5
H Problem mit dem Action listener.... AWT, Swing, JavaFX & SWT 2
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
M Fenster schließen - Listener AWT, Swing, JavaFX & SWT 5
G SWT TreeViewer - drop listener austauschen AWT, Swing, JavaFX & SWT 2
S Action Listener in innerer Klasse ausführen. AWT, Swing, JavaFX & SWT 8
J Sinn eines Selection Listener AWT, Swing, JavaFX & SWT 5
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
M comboBox Listener? AWT, Swing, JavaFX & SWT 2
T Listener in anderen Panel deaktivieren AWT, Swing, JavaFX & SWT 3
A Swing Suche Listener für beliebige Änderung an GUI Items/Controls AWT, Swing, JavaFX & SWT 8
T SWT: Listener auf einem Button reagiert nicht AWT, Swing, JavaFX & SWT 2
L Swing JTextField Content-Listener AWT, Swing, JavaFX & SWT 4
P AWT Wie kann mein listener den Inhalt eines anderen Textfelds ändern? AWT, Swing, JavaFX & SWT 10
M Ansätze zur Kombination mehrerer Listener für Interaktion AWT, Swing, JavaFX & SWT 19
C JLabel Listener auf Textänderung? AWT, Swing, JavaFX & SWT 5
M Mouse Wheel Listener reagiert mehrmals AWT, Swing, JavaFX & SWT 5
F SWT Button listener richtig erstellen AWT, Swing, JavaFX & SWT 2
El_Lobo Swing Problem bei Methodenaufruf in innerer Klasse bei Listener AWT, Swing, JavaFX & SWT 3
S Wem füge ich welchen Listener hinzu? AWT, Swing, JavaFX & SWT 4
R Durch Listener lässt sich Programm nicht mehr ausführen AWT, Swing, JavaFX & SWT 4
T Callback vs. Event listener AWT, Swing, JavaFX & SWT 7
S Swing JTree und seine Listener... AWT, Swing, JavaFX & SWT 4
E JComboBox Listener AWT, Swing, JavaFX & SWT 2
AyKay SWT (alle) Listener bzw. ModifyEventListener entfernen AWT, Swing, JavaFX & SWT 2
S jTextField Listener AWT, Swing, JavaFX & SWT 7
E Listener, werte in andere Klasse übernehmen AWT, Swing, JavaFX & SWT 11
L Action listener in bestimmter spalte AWT, Swing, JavaFX & SWT 2
J AWT Action Listener etc. AWT, Swing, JavaFX & SWT 7
xehpuk Swing Listener für JPopupMenu AWT, Swing, JavaFX & SWT 3
F JCalendar mouseclick listener AWT, Swing, JavaFX & SWT 2
W AWT Listener bei TrayIcon AWT, Swing, JavaFX & SWT 2
K Swing Listener bei JPopupMenu AWT, Swing, JavaFX & SWT 9
E Swing JTextField Listener nach Update?! AWT, Swing, JavaFX & SWT 2
T TransformGroup Listener AWT, Swing, JavaFX & SWT 8
O Swing JTable Listener AWT, Swing, JavaFX & SWT 2
O Collection Listener AWT, Swing, JavaFX & SWT 6
L AWT Paint(g) im Listener aufrufen AWT, Swing, JavaFX & SWT 2
G JTree - Observer oder Listener? AWT, Swing, JavaFX & SWT 6
Avalarion SWT Listener auf Label oder Text Teile AWT, Swing, JavaFX & SWT 10
C Ermitteln ob JComponent einen Listener besitzt AWT, Swing, JavaFX & SWT 2
L JTextfield Listener AWT, Swing, JavaFX & SWT 3
N Listener für Variable AWT, Swing, JavaFX & SWT 4
C Swing Listener für TabPanel AWT, Swing, JavaFX & SWT 8
B Line aus Listener? AWT, Swing, JavaFX & SWT 11
G Model,Listener und background jobs AWT, Swing, JavaFX & SWT 4
1 JList - clearSelection nicht berücksichtigen im Listener AWT, Swing, JavaFX & SWT 7
I Swing Listener auf JPanel AWT, Swing, JavaFX & SWT 9
Dit_ MutableComboBoxModel | Listener fehlt ? AWT, Swing, JavaFX & SWT 6
T Swing JSlider und Adjustment-Listener wollen nicht so recht AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben