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
Panel
und Quadrat
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!!opcorn:
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!!opcorn: