Aufbau eines Programms

  • Themenstarter Themenstarter Bernd1983
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
B

Bernd1983

Gast
Hallo ich soll bis Montag ein Programm realisieren. Nur ist mir leider die Grundstruktur nicht klar.

Angabe:

Write a program which is capable of painting different figures, at least quad,
circle and triangle.
Painting shall be possible through draging the mouse. The first click defines the
start position, then while holding the mouse button and moving the mouse the
extent of the figure is set.
Furthermore a pull-down-menu shall be arranged in order to provide a method
for choosing the current figure (as long as one figure is chosen all new figures
have the same shape). Therefor provide radio buttons in the menu
(JRadioButtonMenuItem).
Define for each figure different colors (lines and figure-background) and line
sizes.
This whole functionality shall be put in a Swing component. This component
creates the figures by means of design patterns (see part A and B), so you will
have to be careful that these figures are independet from the component.
Implement the assignment with the factory method (part A) as well as with the
prototype (part B). So two different swing applications have to be handed in (in
two different packages) The base classes (quad, circle…) can be used in both in
both cases.
Hints:
• Perhaps some of these methods might be useful:
mousePressed() and mouseReleased() from the class MouseListener,
mouseDragged() from the class MouseMotionListener
• The menu can be designed by using JMenuBar, JMenu, JMenuItem,
JRadioGroupMenuItem and RadioGroup


Hmm also meine Überlegungen dazu:

- als erstes abstrakte Klasse Figur und daraufhin die drei Konkretisierungen
- welche Methoden beinhalten meine Konkretisierungen? paint wie realisieren?
- weiters wird man eine swing klasse benötigen und eine Fabriklasse .???

bitte gebt mir tipps, wie ich das Programm aufbaue. Habe leider wenig Erfahrung mit guis

grüsse

bernd
 
ich hab eigentlich schon das Problem mit den Konkretisierungen.

Code:
class Quad extends Figure implements MouseListener{
    
    int x,y,z;


    

    
        Quad(int x,int y, int z, int a){
           super(a);
           this.x=x;
           this.y=y;
           this.z=z;
        }
        
       void mousePressed(){}

was soll ich da bei mousePressed machen für mei konkretes bsp?
 
Hi,
also wenn ich das richtig verstanden habe, soll dein Programm folgendermaßen aussehen:

home.arcor.de/vbinfo/

oder habe ich irgendwas vergessen?
Und du sollst es nur mit swing Komponenten erstellen?


Also ich würde es so machen:

Du erstellst ein Canvas, ein Panel und ordnest sie mit setBounds so an, wie auf dem Bild.
Dem Panel ordnest du nun das Drop-Down Menü zu.

Wenn nun Die Maus gedrückt wird, erfragst du die aktuellen Koordinaten und rufst eine bestimmte Funktion auf,
die daraufhin die Figur mithilfe der Koordinaten in das Canvas einzeichnet zeichnet.

Aber verfasse die Aufgabenstellung doch nochmal in eigen Worte.
 
Ja, Tipps können irreführend sein.

Die mousePressed-(usw.)-Methoden sollten NICHT in den konkreten Implementierungen liegen. Die "Hints" bezogen sich nur auf das "drumherum" (das GUI selbst). Diese Klassen wirst du brauchen, um dein GUI und seine Funktionalität wie gefordert aufzubauen.

D.h. die Konkreten Klassen würden NICHT den MouseListener implementieren. Der MouseListener und MouseMotionListener würde von einer Klassen implementiert, die (z.B.!) von einer GUI-Komponente abgeleitet ist, und die geforderten Interkationsmöglichkeiten anbietet.

Diese Klasse könnte (!) auch das Zeichnen übernehmen. Wobei man stattdessen auch ein Model-View-Controller-Pattern einsetzen könnte (die Aufgabestellung klingt ein bißchen, als sollten da ums Verrecken möglichst viele Design Patterns drin vorkommen :wink: ).

Jedenfalls würde deine "Figur"-Klasse eine Abstrakte Methode
public void paintMe(Graphics g);
anbieten. In den konkreten Implementierungen würde man darin das jeweilige Objekt zeichnen. (Auch DAS könnte man schöner machen (sauberer trennen und so) aber in anbetracht der reichlich fortgeschrittenen Zeit.... .... ...). Die Klasse, die das Zeichnen übernehmen soll, wäre dann z.B. von JPanel abgeleitet, und würde z.B. eine ArrayList<Figur> enthalten. In der paintComponent-methode würde man alle Figuren aus dieser ArrayList zeichnen.

Das Erstellen der Objekte soll mit einer Mischung aus zwei Patterns geschehen. Das Prototype-Pattern habe ich noch nie verwendet (und mir leuchtet sein Sinn nicht ganz ein) aber ein bißchen Code und Erklärungen dazu gibt's hier
http://en.wikipedia.org/wiki/Prototype_pattern#Java_sample_code
Die Klasse "CookieMachine", die dort beschrieben ist, könnte man ein bißchen umbauen, so dass sie zu dem Factory-Pattern passt.
 
also bitte erkläre mir auch die für dich trivialen Schritte. also wieviele Klassen usw. würdest du benötigen..
 
Nicht unbedingt genau das Programm das du schreiben musst, aber vielleicht bringt es dir ein paar Ideen: klick
 
@marco13

du hast geschrieben in den konkreten Klassen Quad usw soll ich die Methode public void paintMe(Graphics g) implementieren. Wie mach ich das das ? wie sieht die Methode da aus?


grüsse
 
Wie gesagt: Das könnte man "schöner" machen (bei strenger Einhaltung des Model-View-Controller-Konzeptes sollten die Figuren ("Model") nicht wissen, WIE sie gezeichnet werden (das übernimmt eigentlich die View) aber das würde u.U. einiges an Mehrarbeit bedeuten, und dann hättest du vielleicht früher mit der Bearbeitung dieser Aufgabe angeangen müssen :!: :!: :!: )

Aber grundsätzlich würden die Implementierngen dieser Methoden dann einfach das malen, was gemalt werden muss
Code:
class Quad extends Figur
{
    int x,y,w,h; // Position und Größe

    public void paintMe(Graphics g)
    {
        g.drawRect(x,y,w,h); // Mal' mal!
    }
}

Ensprechend mit drawCircle, oder 3 x drawLine für ein Triangle (oder einfach "drawShape", aber das wäre dann die aufwändigere Variante....)
 
so jetzt hab ich mich wieder mit dem bsp beschäftigt.

@marco13

danke für die bisherigen Ausführungen

zu paintme() in den Konkretisierungen.

Code:
public void paintMe(Graphics g){
            g.drawRect(x,y,w,h);
            
        }

Ist das alles was ich zu machen habe in den Basisklassen?

und was mache ich zb bei einem Dreieck? Gibt es da auch eine voredefinierte Klasse
 
Mehr ist da erstmal nicht zu tun. Evtl. vorher noch mit
g.setColor(irgendeineFarbe);
eine passende Farbe setzen oder so...

Für ein Dreieck kannst du drei Linien zeichnen, oder das Dreieck durch ein Polygon beschreiben. Genaugenommen könntest du auch Quad+Triangle durch eine Klasse "MyPolygon" ersetzen - das wäre schöner und eleganter, könnte aber weitere Fragen aufwerfen (wie gesagt: Viel Zeit hast du ja nicht mehr)
 
ich wollte jetzt das rechteck mal testen.

das dazu benötige ich ja eigentlich nur einen Frame, einen Listener und einen Button. funktioniert nicht.

Code:
class SwingDemo extends JFrame implements ActionListener{
    
    int a,b,c,d;
    Quad x=new Quad(a,b,c,d);
  Graphics y;
  JButton green;
  
  SwingDemo(){
      
      getContentPane().setLayout(new FlowLayout());
      green=new JButton("rechteck?");
      green.addActionListener(this);
      getContentPane().add(green);
  }
    public void actionPerformed(ActionEvent evt){
       x.paintMe(y);
    }
}



public class DesignPattern {

    
    public static void main(String [] args){
       
    SwingDemo a=new SwingDemo();
    a.setSize(150, 100);
    a.setVisible( true );
    }
}

Was muss ich bei Graphic noch spezialisieren? bzw was muss ich ändern um einfach ein Rechteck auszugeben mit einer Benutzeroberfläche??
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben