BlueJ objekte drehen?

regex9  03.03.2021, 14:41

Mit welchem GUI-Toolkit arbeitest du? AWT? Swing? SaS? SuM?

Nikaron 
Beitragsersteller
 03.03.2021, 15:10

was ist das? das sagt mir alles leider gar nichts

1 Antwort

Das Problem bei deiner Fragestellung ist, dass nicht bekannt ist, mit welchen Werkzeugen / Programmbibliotheken du arbeitest. Du wirst ja sicherlich schon Klassen/Methoden zur Verfügung haben, um bspw. ein Rechteck oder einen Kreis zu zeichnen.

Solche Klassen/Methoden werden in der Regel als Toolkit gebündelt. Java hat AWT/Swing in seiner Standardbibliothek. In Schulen aber wird meines Wissens Schülern eher SuM oder SaS zur Verfügung gestellt. Nun öfter verbreitet ist auch der Fall, dass Lehrer ihre eigenen Hobbyprojekte in den Raum werfen. Das Problem dabei: Meist lässt sich dazu keine (öffentlich zugängliche) Dokumentation finden.

Solltest du also BlueJ im Rahmen einer Schulaufgabe nutzen, würde ich zu Folgendem raten:

  1. Versuche deinen Lehrer zu kontaktieren, um ihn um Hilfe zu fragen.
  2. Schlage in deinen eigenen Schulunterlagen nach.
  3. Schau, ob du noch anders herausfinden kannst, welche Elemente (Methoden, Klassen) dir zur Verfügung stehen. BlueJ kann dich womöglich mit seinem Autosuggestion-Feature unterstützen. Angenommen, du hast eine Variable viereck, die auf ein Viereck verweist. Schreibe im Editor (innerhalb einer Methode):
viereck.

und drücke danach Ctrl + Space / Strg + Leertaste. Möglicherweise öffnet sich daraufhin ein Dialog, in dem die für das Objekt verfügbaren Methoden aufgelistet werden.

Im Falle von AWT/Swing wiederum kannst du für Shape-Klassen die Graphics2D-Klasse verwenden:

Rectangle rectangle = new Rectangle(50, 50, 10, 10);

Graphics2D graphics2d = (Graphics2D)graphics;
graphics2d.rotate(Math.toRadians(30));
grahics2d.draw(rectangle);

und für Bilder die AffineTransform-Klasse:

Graphics2D graphics2d = (Graphics2D)graphics;

AffineTransform originTransform = graphics2d.getTransform();
AffineTransform transform = new AffineTransform();
transform.rotate(Math.toRadians(30));
graphics2d.drawImage(image, transform, null);

graphics2d.setTransform(originTransform);

Nikaron 
Beitragsersteller
 03.03.2021, 16:45

mir wird als fehlermeldung angezeigt: cannot find symbol– class Graphics2D

Muss ich dann eine neue klasse dafür selber erstellen? oder wo soll ich das hinschreiben?

Danke schonmal für die erklärung und ausführliche antwort!

0
regex9  03.03.2021, 18:45
@Nikaron

Dies wäre der Weg über Java Swing. Wenn du im Vorfeld für deine Aufgabe andere Methoden zum Zeichnen gelernt hast, solltest du diesen Weg (zumindest für deine Aufgabe) nicht weiterverfolgen, da er wohl nicht erwartet wird.

Du brauchst diese Imports

import java.awt.*;
import java.awt.geom.*; // for AffinityTransform
import javax.swing.*; 

und einen kompletten Frame dafür.

// main:
JFrame frame = new JFrame("My canvas application");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new CanvasPanel());
frame.pack();
frame.setVisible(true);

Ein Frame stellt ein neues Fenster dar, in dem du Komponenten, wie in diesem Fall ein Panel einbetten kannst. Dieser Frame beendet die Anwendung, sofern man auf das Kreuz rechts oben im Fensterkopf klickt und er richtet sich an der Größe des inneren Panels aus. Zum Schluss wird er noch sichtbar gemacht.

CanvasPanel:

class CanvasPanel extends JPanel {
  @Override
  public Dimension getPreferredSize() {
    return new Dimension(300, 300);
  }

  @Override
  protected void paintComponent(Graphics graphics) {
    super.paintComponent(graphics);

    // draw something ...
  }
}

Das Panel gibt über getPreferredSize eine Information an den Layout Manager des Frames zurück, welche Größe es benötigen würde. Innerhalb von paintComponent wird wiederum gezeichnet.

Für die Methoden der Graphics2D-Klasse solltest du in die Referenz schauen. Dort findest du ebenso eine Dokumentation der anderen hier verwendeten Klassen, wie Graphics, AffinityTransform, etc.. Des Weiteren findest du hier die offiziellen Tutorials (von Oracle).

0
Nikaron 
Beitragsersteller
 03.03.2021, 20:10
@regex9

Echt super, dankeschön!

0