BlueJ geschlossene Flächen ausfüllen

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • BlueJ geschlossene Flächen ausfüllen

    Guten Tag,

    ich komme sofort zur Sache :). Wir haben in der Schule angefangen mit BlueJ zu arbeiten. Wir haben den Auftrag bekommen Nationalflaggen zu Zeichnen. Ich habe den Auftrag bekommen die türkische Flagge zu programmieren. Wie dem auch sei, ich habe ein großen Problem, denn ich weiß nicht wie ich geschlossene Flächen ausfüllen kann, sprich, ich hab den Umriss des Sterns, doch die Innenflächen sind nicht ausgefüllt. Wenn einer so nett wäre und mir die Befehle aufschreiben und eventuell auch was dazu erzählen könnte, wäre ich ihm äußerst dankbar.

    Dankesehr
  • Ich gehe mal davon aus, dass du bereits eine Klasse benutzt, die von JComponent abgeleitet ist.
    Das Füllen geht dann leicht so:

    Source Code

    1. @Override
    2. public void paintComponent(final Graphics graphics) {
    3. final Graphics2D g = (Graphics2D)graphics;
    4. final GeneralPath path = new GeneralPath();
    5. //mit dem path den Stern zeichnen -> siehe Doku moveTo()/lineTo()
    6. g.fill(path);
    7. }
  • Danke für deine Antwort aber da verstehe ich nur Bahnhof. :D

    Source Code

    1. import sum.kern.*;
    2. /**
    3. * Beschreiben Sie hier die Klasse TürkeiFahne.
    4. *
    5. * @author (Ihr Name)
    6. * @version (eine Versionsnummer oder ein Datum)
    7. */
    8. public class TürkeiFahne
    9. { Bildschirm screen;
    10. Buntstift pen;
    11. public TürkeiFahne()
    12. { screen = new Bildschirm(1000,1000);
    13. pen = new Buntstift();
    14. pen.hoch();
    15. pen.bewegeBis(100,250);
    16. pen.runter();
    17. pen.setzeFarbe(Farbe.ROT);
    18. pen.setzeFuellMuster(Muster.GEFUELLT);
    19. pen.zeichneRechteck(800,500);
    20. pen.hoch();
    21. pen.bewegeBis(400,500);
    22. pen.runter();
    23. pen.setzeFarbe(Farbe.WEISS);
    24. pen.zeichneKreis(150);
    25. pen.setzeFarbe(Farbe.ROT);
    26. pen.bewegeBis(427,500);
    27. pen.zeichneKreis(127);
    28. pen.setzeFarbe(Farbe.WEISS);
    29. pen.hoch();
    30. pen.bewegeBis(537,500);
    31. pen.runter();
    32. pen.bewegeBis(655,460);
    33. pen.bewegeBis(583,565);
    34. pen.bewegeBis(583,435);
    35. pen.bewegeBis(655,540);
    36. pen.bewegeBis(537,500);
    37. }
    38. }
    Display All


    Das wäre jetzt meine "bisher" bearbeitete Version einer Flagge. Den Stern muss ich mit weißer Farbe ausfüllen. -_-
  • Okay, ich wusste nicht, dass ihr da eine Klasse Buntstift habt; hat wahrscheinlich dein Lehrer geschrieben.
    Gibt es nicht die Möglichkeit, setzeFüllmuster() mit einem rein weissen "Muster" zu zeichnen.
    Oder gibt es vlt ein setzeFüllFarbe ?

    Wenn dein Lehrer dir die Aufgabe gibt, muss es ja auch umsetzbar sein - hier kann dir aber (ausser dein Lehrer) da niemand helfen.
    Verlange im Zweifelsfall doch mal die Dokumentation zu der .jar deines Lehrers.

    Wenn du genug Motivation hast, kannst du es natürlich auch mit den Standardmitteln von Java tun;
    du bräuchtest nur zwei Klassen, eine für das Fenster und eines für die Flagge.

    greet
  • Ist echt nicht viel Code; ich habe mal eine Fantasie Flagge gebaut, ist selbsterklärend, was du für dich anpassen musst:

    Source Code

    1. @SuppressWarnings("serial")
    2. public class MainWindow extends JFrame {
    3. public static void main(final String... args) {
    4. new MainWindow();
    5. }
    6. public MainWindow() {
    7. super("Flagge");
    8. SwingUtilities.invokeLater(new Runnable() {
    9. @Override
    10. public void run() {
    11. setupUI();
    12. pack();
    13. setLocationRelativeTo(null);
    14. setVisible(true);
    15. }
    16. });
    17. setDefaultCloseOperation(EXIT_ON_CLOSE);
    18. }
    19. private void setupUI() {
    20. add(new FlagComponent(), BorderLayout.CENTER);
    21. }
    22. }
    Display All


    Source Code

    1. @SuppressWarnings("serial")
    2. public class FlagComponent extends JComponent {
    3. public FlagComponent() {
    4. setPreferredSize(new Dimension(400, 300));
    5. }
    6. @Override
    7. protected void paintComponent(final Graphics graphics) {
    8. final Graphics2D g = (Graphics2D)graphics;
    9. final int w = getWidth();
    10. final int h = getHeight();
    11. g.setColor(Color.BLUE);
    12. g.fillRect(0, 0, w, h/3);
    13. g.setColor(Color.GREEN);
    14. g.fillRect(0, h/3, w, h/3);
    15. g.setColor(Color.PINK);
    16. g.fillRect(0, 2*h/3, w, h/3);
    17. final GeneralPath path = new GeneralPath();
    18. path.moveTo(w/3, h/2);
    19. path.lineTo(w/3 + 25, h/2 + 25);
    20. path.lineTo(w/3 - 25, h/2 + 25);
    21. path.lineTo(w/3, h/2);
    22. g.setColor(Color.RED);
    23. g.fill(path);
    24. }
    25. }
    Display All
  • Danke, dass du dir die Mühe gemacht hast, aber ich kann wirklich nichts damit anfangen -_-

    Danke nochmals. Ich bräuchte eine Funktion, welches eine geschlossene Fläche "ausradiert" bzw. "ausfüllt", ohne diese Elemente sieht es so aus, als ob ich nicht in der Lage eine Flagge der türkischen Nation anzufertigen.

    Dir nochmals vielen Dank, Runnable!
  • Ich habe grad mal kurz drüber geschaut. Ich bin mir nicht sicher ob dies so geht da ich grad nur kurz zeit hatte in das Projekt rein zu schauen , aber ich kann mir das Projekt morgen nochmal angucken.

    Wenn du den Stern kleiner zeichnen könntest , könntest du die Lienien Breite so vergrößern das der Stern "gefüllt" aussieht.

    pen.setzeLinienBreite(ZAHL);
  • Ich denk du hast

    "RedOne" wrote:

    alles selber geschrieben


    Warum lügst du uns an, in einem anderen Thread hat ein anderer ein anderes Problem mit SuM.
    Ausserdem zeigst du überhaupt keine Motivation, selbst etwas zu machen.

    Jedenfalls liefert dir meine aufgezeigte Lösung alles was man wissen muss, um SuM so zu erweitern, dass man Flächen füllen könnte.
  • Runnable wrote:

    Ich denk du hast

    "RedOne" wrote:

    alles selber geschrieben


    Warum lügst du uns an, in einem anderen Thread hat ein anderer ein anderes Problem mit SuM.
    Ausserdem zeigst du überhaupt keine Motivation, selbst etwas zu machen.

    Jedenfalls liefert dir meine aufgezeigte Lösung alles was man wissen muss, um SuM so zu erweitern, dass man Flächen füllen könnte.

    Was erzählst du für ein Stuss? Ich habe die Flagge selber geschrieben! Ich kam nur nicht mit der Ausfüllung des Sterns weiter, und so versuchte ich mir durch Das Forum Hilfe zu verschaffen, ich habe mich für eure Beiträge bedankt, doch ich kann mit deinem Java-Coding nichts anfangen.
    Ich wurde soweit nicht eingeschult. Ich suche im Internet nach Lösungen und zeige auch Engagement! Und du unterstellst mir, dass ich euch anlüge? Ich glaub' ich lese nicht richtig!
  • Zugegeben, der Java text von Runnable bringt dich wirklich nicht weiter.
    Was du da oben gepostet hast Runnable ist zwar Java , aber klein BlueJ SuM.
    Die Klasse SuM wird komplett anders geschrieben und angewandt. Ich hatte die Tage leider wenig zeit , ab morgen mittag allerdings habe ich Wochenende und da gucke ich mir dein Projekt nochmals genauer an wenn du möchtest.

    MfG
  • Habe mir gerade mal die SuM-Doku angeschaut: die sagt eindeutig, dass setzeFüllmuster nur für Kreise und Rechtecke Wirkung hat; die Aufgabe, einen gefüllten Stern zu zeichnen, geht also nur über den Weg, mehrere Linien nebeneinander zu setzen.

    Was auch ginge:
    Bildschirm hat eine Methode g(), die das darunterliegende Graphics Object bereitstellt; ist aber protected.
    D.h. du kannst von Bildschirm erben, über g() den Graphickontext beschaffen und darauf dann alles aufrufen, was Graphics2D bietet (wie oben gezeigt).