Swing struktur und nahester Punkt

Status
Nicht offen für weitere Antworten.
L

Lopsided

Gast
Hallo,

habe n kleines Programm geschrieben, bei dem mehrere Bälle in einem fenster erstellt und jeweils bewegt werden koennen.

Jframe(fenster)->JPanel(bereich in dem die Bälle gezeichnet werden) -> JComponent(jeder Ball ist ein JCom.)

Bälle werden auf linksClick gezeichnet und mit rechts bewegt.
Später soll die bälle auf anfrage auch ein kleines menue aufpoppen lassen(jeweils am ball) wo die farbe und der radius eingestellt werden kann)

1. Frage: Ist das sinnig das fenster so aufzubauen. soll ball wirklich eine Jcomponente sein und nicht eher panel ? Bin da nicht so fit wenns um Gui geht!
2. Frage: Hab n kleinen alg. geschrieben um den richtigen Ball zu bekommen (aus nem Vector) sobald die mouse drüber ist. Gibts da vieleicht ne bessere lösung....focus oder so bzw. kennt jemand einen saueberen algorithmus?

DAnke
 

Marco13

Top Contributor
Ich bin ja ein Verfechter der "Nicht-Jeder-Sprite-Muss-Eine-JComponent-Sein"-Philosophie (siehe auch die Diskussion und speziell den verlinkten Beitrag: http://www.java-forum.org/java-basi...694-pingpong-selber-schreiben.html#post394005 )

Die Überprüfung, welcher Ball von einem Mausklick getroffen wird, wäre aber im einfachsten Fall unabhängig von der Implementierung eine einfache Suche in der Liste (oder, wenn du's für nötig hältst, dem Vector) der alle Bälle enthält. Bei jedem Ball macht man dann eine Abfrage im Sinne von [c]ball.enthält(mausposition)[/c]...
 

hdi

Top Contributor
Java:
public class Ball { 
    private Point center;
    private int radius;
   
    public Ball(Point center, int radius) {
        this.center = center;
        this.radius = radius;
    }

    public void move(int dx, int dy){ 
        center.x += dx;
        center.y += dy;
    }

    public boolean contains(Point p) {  return p.distanceTo(center) <= radius; }

    public boolean intersects(Ball b) {
        return center.distanceTo(b.center) <= radius + b.radius;
    }

    public void paint(Graphics g){
         g.fillOval(center.x - radius/2, center.y - radius/2, 2*radius, 2*radius);
    }
}
 
Zuletzt bearbeitet:

André Uhres

Top Contributor
1. Frage: Ist das sinnig das fenster so aufzubauen. soll ball wirklich eine Jcomponente sein und nicht eher panel ? Bin da nicht so fit wenns um Gui geht!
2. Frage: Hab n kleinen alg. geschrieben um den richtigen Ball zu bekommen (aus nem Vector) sobald die mouse drüber ist. Gibts da vieleicht ne bessere lösung....focus oder so bzw. kennt jemand einen saueberen algorithmus?
JPanel bietet für deinen Zweck kaum mehr als JComponent. Interessanter könnte ein JLabel sein: es beinhaltet z.B. die Methode "setIcon" (für den Fall wo der Ball durch ein Bild dargestellt werden soll). Ein JPopupMenu kannst du einfach mit setComponentPopupMenu setzen. Es erscheint gewöhnlich auf Rechtsklick. Die Bälle können wir auch mit Linksklick bewegen (eigener MouseListener, dann erübrigt sich auch ein Algorithmus um den richtigen Ball zu bekommen). Ein eigener FocusListener ist auch interessant: wir können dann den Ball, der den Fokus hat, optisch hervorheben. Mit [c]ball.requestFocusInWindow();[/c] können wir dem Ball, der gerade erzeugt wurde, den Fokus geben. Und bei "mousePressed" geben wir dann dem Ball den Fokus, der gerade angeklickt wurde. Ein FokusListener könnte so aussehen:
Java:
ball.addFocusListener(new FocusListener() {
    public void focusGained(final FocusEvent e) {
        currentBall = ball;
        ball.setForeground(Color.RED);
    }
    public void focusLost(final FocusEvent e) {
        ball.setForeground(Color.BLACK);
    }
});
Ein Mousehandler für den Ball:
Java:
MouseAdapter mouseHandler = new MouseAdapter() {
    private Point pressedPoint;
    @Override
    public void mouseDragged(final MouseEvent e) {
        Point draggedPoint = e.getPoint();
        Point loc = ball.getLocation();
        loc.translate(draggedPoint.x - pressedPoint.x, draggedPoint.y - pressedPoint.y);
        ball.setLocation(loc);
    }
    @Override
    public void mousePressed(final MouseEvent e) {
        ball.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
        pressedPoint = e.getPoint();
        ball.requestFocusInWindow();
    }
    @Override
    public void mouseReleased(final MouseEvent e) {
        ball.setCursor(Cursor.getDefaultCursor());
    }
};
 
U

Unregistriert

Gast
ihr seit krass.....
vielen dank erstmal , werd jetzt erstmal drüber nachdenken:)
thx
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Package Struktur für GUI Programmierung AWT, Swing, JavaFX & SWT 26
K Swing Struktur für TreeTable rekursiv aufbauen AWT, Swing, JavaFX & SWT 17
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX Projekt-Struktur AWT, Swing, JavaFX & SWT 2
J Swing Organisation & Struktur, die 2. AWT, Swing, JavaFX & SWT 4
J Swing MVC mit Java Swing, insbesondere die Controller-Struktur AWT, Swing, JavaFX & SWT 4
B Dialog aus DB Struktur erstellen AWT, Swing, JavaFX & SWT 4
H Struktur für Gui-Programmierung AWT, Swing, JavaFX & SWT 2
M Abhängige JTable - MCV - Frage zu Struktur AWT, Swing, JavaFX & SWT 5
R Tree-Struktur in einer DB abspeichern AWT, Swing, JavaFX & SWT 15
R Punkt von MouseListener hat falsche Koordinate AWT, Swing, JavaFX & SWT 2
P Abwächselnd ein Punkt und ein x anzeigen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
J Rectangle g.fillRec() X/Y Punkt AWT, Swing, JavaFX & SWT 5
S Punkt finden der in einem Shape liegt..? AWT, Swing, JavaFX & SWT 11
K 2D-Grafik Punkt in Eclipse AWT, Swing, JavaFX & SWT 4
S Bild von Punkt zu Punkt zeichnen AWT, Swing, JavaFX & SWT 8
B 3D-Grafik Punkt in JAVA3D darstellen AWT, Swing, JavaFX & SWT 2
J Punkt-genaue Positionierung von SWT-Komponenten AWT, Swing, JavaFX & SWT 10
T JComboBox Komma in Punkt umwandeln AWT, Swing, JavaFX & SWT 2
S JTable Float Column fuegt automatisch Punkt hinzu wenn man Zahlen eingibt. AWT, Swing, JavaFX & SWT 21
X Punkt auf Geometrie AWT, Swing, JavaFX & SWT 24
G Blinkenden Punkt zeichen AWT, Swing, JavaFX & SWT 2
S Will einen Punkt zeichnen aber krieg das net hin. AWT, Swing, JavaFX & SWT 2
J JScrollPane soll automatisch zu einem punkt scrollen AWT, Swing, JavaFX & SWT 4
G Punkt um ein Rotationszentrum rotieren lassen AWT, Swing, JavaFX & SWT 15
S FAQ und JTable Tutorial.Teil.4 Punkt 5 wichtige Bemerkung AWT, Swing, JavaFX & SWT 2
T drehung um einen anderen punkt AWT, Swing, JavaFX & SWT 2
R Hässlicher Punkt bei JPopupMenu AWT, Swing, JavaFX & SWT 12
E x wert von einem vorhandenen punkt abziehen? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben