AWT QuadratListener implementieren

raptus93

Mitglied
Hallo!

Ich bin neu hier und auch noch nicht so der Pro in Java (zumindest praktisch nicht), habe aber "Java lernen mit BlueJ (Barnes, Kölling)" quasi durchgelesen. Dennoch hoffe ich, dass deswegen jetzt niemand sagt "Dann hättest du das aber wissen müssen", bei uns an der Hochschule haben wir viel Theorie aber nur wenig Praxis.

Alles Nebensache, kommen wir zum Problem:
Das Programm, welches ich schreibe, stellt ein Panel in einen Frame und soll einen Quadrat anzeigen.
Wenn ich auf das Quadrat klicke, so soll dieses eine Methode ausführen, als sprich, einfach nur ein Button sein.

Das wäre ein erster Schritt in Richtung Ziel.
Ich habe dafür 3 Klassen geschrieben,

Frame

Java:
import javax.swing.JFrame;

public class Frame
{
    public void main()
    {
        DrawingPanel panel = new DrawingPanel();
        JFrame frame = new JFrame("Kick!");
        frame.setSize(1280,720);
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}

Panel

Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class DrawingPanel extends JPanel
{
    public Quadrat quadrat1;
    int xPos, yPos, width, red, green, blue;
    /**
     * Konstruktor
     */
    public DrawingPanel()
    {        
        setParameters();
        quadrat1 = new Quadrat();
        addMouseListener(new QuadratListener(quadrat1));
        setBackground(Color.white);
    }
    public void setParameters()
    {
        xPos = 40;
        yPos = 40;
        width = 20;
        red = 200;
        green = 200;
        blue = 200;
    } 
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        quadrat1.draw(g);
    }
    private class QuadratListener implements MouseListener 
    {
            Quadrat quadrat1;
            
            QuadratListener(Quadrat quadrat1)
            {
                this.quadrat1 = quadrat1;
            }
            public void mouseClicked(MouseEvent e)
            {
                System.out.println("Ich habs geschafft!");
            }
            public void mouseEntered(MouseEvent e)
            {
                
            } 
            public void mouseExited(MouseEvent e)
            {
                
            } 
            public void mousePressed(MouseEvent e) 
            {
                
            } 
            public void mouseReleased(MouseEvent e)
            {
                
            } 
    }
    
}

und Quadrat

Java:
import java.awt.*;
import javax.swing.*;

public class Quadrat extends JButton
{
    private int xPos, yPos, width, rad;
    private Color color;
    private int red = 200;
    private int green = 200;
    private int blue = 200;
    /**
     * Constructor for objects of class Circle
     */
    public Quadrat()
    {
        zeichnen(30,30,500,new Color(red, green, blue));
    }
    public void zeichnen(int xPos, int yPos, int width, Color color)
    {
        this.xPos = xPos;
        this.yPos = yPos;
        this.width = width;
        this.color = color;
    }
    public void setFarbe(int farbe)    //erstmal unwichtig
    {
        farbe=farbe-8;
        red=farbe;
        green=farbe;
        blue=farbe;
    }
    public void draw (Graphics g)
    {
        g.setColor(color);
        g.fillRoundRect(xPos, yPos, width, width, rad, rad);
    }
}

Diese Struktur hat nach langem Try'n'Error dazu geführt, dass die Konsole mir "Ich habs geschafft!" ausgibt, wenn ich irgendwo in das Panel klicke.
Das macht mich sehr traurig! Ich vermute, dass ich das gesamte Panel dem Listener hinzugefügt habe, stimmt das?

Nun meine Frage, welche Struktur empfehlt ihr, damit ich das Quadrat direkt anklicken muss, damit dieses eine bestimmte Methode ausführt?

Ich bedanke mich für alle Antworten!!:popcorn:
 

raptus93

Mitglied
Quadrat erbt von JButton.
Somit sollte es doch alle Methoden von JButton ausführen können(, oder)?
Ich kann mit der vielen Theorie was anfangen, habe aber größte Schwierigkeiten, dass gesagte (und verstandene) in BlueJ umzusetzen.
Wie würde eine Methode heißen, die einem JButton ermöglicht, die Farbe zu ändern?
Was sollte jetzt mein nächster Schritt sein?
 

Solor

Aktives Mitglied
Das hat jetzt nix damit zu tun, aber ich glaube, es ist unklug, eine Klasse "Frame" zu nennen - die gibt es nämlich schon :) Bei deinem anderem Problem kann ich dir leider auch nciht weiterhelfen :(

PS: @Timothy Truckle: Du warst doch gerade eben so nett und hilfsbereit????
 

Marco13

Top Contributor
Ohne genau zu wissen, worauf das rauslaufen soll: Warum erbt Quadrat von JButton? Das sollte NICHT so gemacht werden. Quadrat könnte, wenn überhaupt, vielleicht von "Rectangle" erben (theoretisch ist auch das fragwürdig, aber sei's erstmal drum).

Durch das
addMouseListener(new QuadratListener(quadrat1));
wird der Listener natürlich zum Panel hinzugefügt. Und das ist auch nicht verkehrt. Man müßte in der mousePressed des Listeners dann noch sowas machen wie
Java:
if (quadrat1.contains(e.getPoint())
{
    System.out.println("War im Quadrat");
}
(die Methode "contains(Point)" gibt es in der Klasse "Rectangle" schon, d.h. das würde es vereinfachen)
 

raptus93

Mitglied
Ich danke noch einmal für alle Antworten!
TT, du bist der Beste, ich hatte dich nur falsch verstanden, und sarkasmus hinein interpretiert.
Vielleicht bin ich paranoid :oops:
Ich sitze jetzt grade dran und werde mit evtl auftauchenden Fragen vielleicht wieder kommen.
 

Marco13

Top Contributor
*räusper*

Was ist das:
220px-SquareDefinition.svg.png


Äh - nein :noe:
Ja. Aber kein JButton :noe:
 

Marco13

Top Contributor
hatte beide Antworten richtig .... habe ich jetzt was gewonnen ???:L:D

Gruß
Klaus
----
Bin zu arm, um mir eine Signatur leisten zu können ..... ;(

Ja. Und sogar etwas, was du dir schon lange wünschst: Eine Signatur!
Deine neue Signatur hat gesagt.:
Der VfL ist wirklich toll!

:joke:

Im Ernst, wenn man sogar das Zeichnen des Buttons "überschreibt", und den Button nur als aklickbares Quaadrat verwendet, ist das NOCH schlimmer, als mein immer wieder runtergeleiertes "JComponents-nicht-als-Sprites-verwenden" ...
 

Marco13

Top Contributor
[ot]
Wenn ich damit gerechnet hätte, dass du das übernimmst, hätte ich mir etwas ... "geistreicheres" überlegt.
Oder was obszönes ... :reflect: :hihi:
[/ot]
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Swing Background Image in JFrame implementieren AWT, Swing, JavaFX & SWT 40
L JavaFX SelectionService selber implementieren AWT, Swing, JavaFX & SWT 7
ralfb1105 JavaFX AreaChart als DB Monitor implementieren AWT, Swing, JavaFX & SWT 11
D JavaFX Google API/OpenStreetMap in GUI implementieren AWT, Swing, JavaFX & SWT 1
Joker4632 JavaFX GridPane richtig implementieren AWT, Swing, JavaFX & SWT 7
Thallius Single Sign On in Java Implementieren AWT, Swing, JavaFX & SWT 6
L JavaFX StackedBar Implementieren? AWT, Swing, JavaFX & SWT 7
B GridLayout - wie am besten implementieren AWT, Swing, JavaFX & SWT 3
U Buttons schräg implementieren AWT, Swing, JavaFX & SWT 4
B mouseOnEntered ( Controller richtig implementieren) AWT, Swing, JavaFX & SWT 4
C In Hauptfenster Programm-Klassen implementieren AWT, Swing, JavaFX & SWT 9
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
E Swing KeyListener implementieren AWT, Swing, JavaFX & SWT 12
M KeyListener richtig implementieren AWT, Swing, JavaFX & SWT 3
E Swing JTextArea in JFrame, wie nun WindowFocusListener implementieren? AWT, Swing, JavaFX & SWT 2
S Swing Spiel Richtig/Falsch implementieren AWT, Swing, JavaFX & SWT 5
S TextArea ausgabe ohne JFrame zu implementieren AWT, Swing, JavaFX & SWT 2
S Swing JTextArea - Bild auf/ab Tasten implementieren AWT, Swing, JavaFX & SWT 4
H shell in view implementieren; menu mit keystroke unterlegen AWT, Swing, JavaFX & SWT 8
L SWT CLabel als Button implementieren? AWT, Swing, JavaFX & SWT 6
3TageBart Ebenen in Zeichen-Programm implementieren AWT, Swing, JavaFX & SWT 9
GilbertGrape ActionListener implementieren oder Eigenen für jede Komponente? AWT, Swing, JavaFX & SWT 9
R setEnabled bei eigenem Widget implementieren? AWT, Swing, JavaFX & SWT 3
S Methoden implementieren AWT, Swing, JavaFX & SWT 7
B KeyListener implementieren AWT, Swing, JavaFX & SWT 3
F Welchen Listener implementieren? AWT, Swing, JavaFX & SWT 4
S Mehrsprachigkeit in GUI implementieren AWT, Swing, JavaFX & SWT 3
F Größenänderung mittels Maus - selbst implementieren? AWT, Swing, JavaFX & SWT 3
M ActionListener implementieren AWT, Swing, JavaFX & SWT 10
J Scrolling implementieren mit JPanels AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben