Ereignisbasiert programmieren (Pong)

BriHan

Grünschnabel
Guten Morgen liebe Leute,

Ich bin ein Informatik-Neuling und studiere gerade mein erstes Semester im Bereich Java Wirtschaftsinformatik/BWL.

Nun habe Ich ein Problem, denn mein Tutor konnte mir die Lösung der Übung erkältungsbedingt nicht erklären, auch per E-Mail-Kontakt ist er nicht erreichbar. Schlecht ist, dass diese Übung auf einer Aufgabe einer Prüfungsaufgabe stellt. In meiner Übungsaufgabe weiß Ich folgend nun nicht wie Ich in meinem Programm meinen Schiebereglern eine sichtbare Skala und Zahlenwerte geben soll. Wo füge Ich da getGraphics().fillOval sinnvoll ein?

Außerdem habe Ich an einem Beispiel nicht verstanden wie sich diese Datei (Pong) mit dem ActionListener sinnvoll anwenden soll, sodass das Programm bei Mausklicks im Spielfeld so antwortet, das
X- und Y-Koordinate des Mauszeigers ausgegeben werden.
Java:
import javax.swing.*;
import java.awt.*;

class Pong {

public static void main(String[] args) {
JFrame f = new JFrame("Pong in Java");
JPanel gamefield = new JPanel();
gamefield.setPreferredSize(new Dimension(256, 256));
gamefield.setBackground(Color.WHITE);

JPanel vertical = new JPanel();
JPanel vertRegler = new JPanel();
JLabel vertLabel = new JLabel("vertical");
JSlider vertSlider = new JSlider(SwingConstants.VERTICAL, 0, 255, 127);
vertSlider.setName("vert");

vertRegler.setLayout(new BorderLayout());
vertRegler.add(vertLabel, BorderLayout.NORTH);
vertRegler.add(vertSlider, BorderLayout.CENTER);

f.add(gamefield, BorderLayout.CENTER);
f.add(vertical, BorderLayout.EAST);
vertical.add(vertRegler);

JPanel horizontal = new JPanel();
JPanel horizRegler = new JPanel();
JLabel horizLabel = new JLabel("horizontal");
JSlider horizSlider = new JSlider(SwingConstants.HORIZONTAL, 0, 255, 127);
horizSlider.setName("horiz");

horizRegler.setLayout(new BorderLayout());
horizRegler.add(horizLabel, BorderLayout.NORTH);
horizRegler.add(horizSlider, BorderLayout.CENTER);

f.add(horizontal, BorderLayout.SOUTH);
horizontal.add(horizRegler);

f.setSize(400, 400);
f.setVisible(true);

}
}
Sorry, wenn Ich ihn den Augen einiger hier etwas zu leichtes frage, aber Ich bin gerade neu und wir haben noch nicht ereignisbasiert gearbeitet, zudem mein Tutor mir bisher nur einmal etwas verständlich erklärte, den Rest musste Ich im Netz nachlesen.
Für Antworten bedanke Ich mich im Vorraus, aber bitte förmlich bleiben.
 
Zuletzt bearbeitet von einem Moderator:
Hallo @BriHan,

ich mir nicht ganz sicher ob ich Dich richtig verstanden habe. Du möchtest wissen, wie man einen Schieberegler erstellt (mit Minimal- und Maximalwert), und wie man den aktuell eingestellten Wert an einer anderen Stelle in Fenster ausgibt ? Außerdem, wie du bei einem Mausklick im Fenster die aktuelle Position der Maus bekommst ?
 
Danke erstmalhttps://www.tutorials.de/members/palme4001.273912/@Palme4001https://www.tutorials.de/members/palme4001.273912/das sich hier gemeldet wird, wenn auch leider zu spät. :(
Du hast den Kern der Aufgabe richtig verstanden, ja. Selbstverständlich in Kooperation mit 2 Listenern, hieß es zudem, einer zudem für die Einblendung der X/Y - Koordinaten.

Ich als vollkommener Newbie und Frühstudent hab nun davon keinen Plan, mein Tutor kam auch erst sehr kurzfristig damit an (zeitgleich zu Aufgaben mit Polymorphie etc.) und meint "man solle es probieren". Außerdem musste Ich meine 2 Prüfungsaufgaben abgeben, die halt der Übung ähneln bzw. auf dieser aufbauen. Glücklicherweise habe Ich jetzt das erste Semester geschafft was mich natürlich aufatmen ließ. Allerdings gab es immer noch keine sorgfältige Erklärung seitens des Tutors zur ereignisbasierten Programmierung, wie gewünscht.

Für Erklärungen bin Ich weitherhin dankbar,

MfG Brihan
 
Hallo @BriHan ,
ich habe dir ein kleines Beispiel geschrieben, und hoffe meine Kommentierkünste im Code sind einigermaßen verständlich.

Java:
package com.palm.main;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Pong {
   
    JFrame frame;
    JSlider slider;
    JLabel mousePos;
    JLabel sliderPos;
   
    public Pong(){
       
        frame = new JFrame();
        frame.setSize(500, 300);
        frame.setLayout(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       
        //konstruktor erwartet 3 Integer: min, max und start
        slider = new JSlider(0, 50, 25);
        slider.setBounds(10, 10, 300, 100);
        slider.setMinorTickSpacing(2);
        slider.setMajorTickSpacing(10);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
       
        //für ausgabe des wertes des schiebereglers
        sliderPos = new JLabel("value:"+String.valueOf(slider.getValue()));
        sliderPos.setBounds(10, 150, 100, 30);
       
        //für ausgabe der mauskoordinaten
        mousePos = new JLabel("x:0  y:0");
        mousePos.setBounds(10, 200, 100, 30);
       
        //change listener hört auf veränderung des schiebereglers
        slider.addChangeListener(new ChangeListener() {
           
            public void stateChanged(ChangeEvent a) {
                //mit slider.getValue() den aktuellen wert im label ausgeben
                sliderPos.setText("value:"+slider.getValue());
            }
        });
       
       
        //mouse listener hört auf aktionen der maus
        //alle 5 methoden müssen überschrieben werden, wobei wir nur prüfen wollen, ob es einen Klick gab,
        //also verwenden wir nur mouseClicked
        frame.getContentPane().addMouseListener(new MouseListener() {
           
            @Override
            public void mouseClicked(MouseEvent event) {
                //über das MouseEvent 'event' gelangt man nun an x und y koordinate der maus heran
                mousePos.setText("x:"+event.getX()+"   y:"+event.getY());
            }
           
            @Override
            public void mouseReleased(MouseEvent arg0) {}
           
            @Override
            public void mousePressed(MouseEvent arg0) {}
           
            @Override
            public void mouseExited(MouseEvent arg0) {}
           
            @Override
            public void mouseEntered(MouseEvent arg0) {}
           
        });
       
        frame.getContentPane().add(slider);
        frame.getContentPane().add(sliderPos);
        frame.getContentPane().add(mousePos);
        frame.setVisible(true);
    }

   
    public static void main(String[] args) {
        
        new Pong();
    }
}

Bei nerviger GUI-Programmierung haben mir immer videotutrials weitergeholfen.
 
Zurück