Java Swing - Dreieck zeichnen mit verschiedenen Variablen

Diskutiere Java Swing - Dreieck zeichnen mit verschiedenen Variablen im Java Basics - Anfänger-Themen Bereich.
T

tapped

Hallo, ich bin noch sehr neu in Java und habe zuvor nie etwas mit Swing gemacht. Nun zum Problem.
Ich habe ein Programm zur Dreiecksberechnung geschrieben. (Ist noch nicht ganz optimiert)
Wie kann ich jetzt mit den ausgerechneten Variablen das Dreieck zeichen und es auf der Konsole ausgeben?
Java:
package de.test.program.dreiecksberechnung;

import javax.swing.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    private String getNextLine() throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr, 0xFFFF);
        return br.readLine();
    }

    private Double readNumber() {
        try {
            return Double.parseDouble(getNextLine());
        } catch (NumberFormatException | IOException e) {
            return null;
        }
    }

    private Double runInput(String text) {
        System.out.print(text+": ");
        return readNumber();
    }

    private double sin(double s) {
        return Math.toDegrees(Math.sin(Math.toRadians(s)));
    }

    private double asin(double s) {
        return Math.toDegrees(Math.asin(Math.toRadians(s)));
    }

    private double cos(double s) {
        return Math.toDegrees(Math.cos(Math.toRadians(s)));
    }

    private double acos(double s) {
        return Math.toDegrees(Math.acos(Math.toRadians(s)));
    }

    private double sqrt(double s) {
        return Math.sqrt(s);
    }

    private double pow(double s, double p) {
        return Math.pow(s,p);
    }



    public void gui() {

        Double a = runInput("a");
        Double b = runInput("b");
        Double c = runInput("c");
        Double alpha = runInput("alpha");
        Double beta = runInput("beta");
        Double gamma = runInput("gamma");
        double umfang = 0;
        Graphics g;


        while (a==null||b==null||c==null||alpha==null||beta==null||gamma==null) {

            if(beta==null && b!=null && alpha!=null & a!=null) {
                beta = asin(b*sin(alpha)/a);
            }

            if (gamma==null && alpha!=null && beta!=null) {
                gamma = 180 - alpha - beta;
            }

            if (beta==null && alpha!=null && gamma!=null) {
                beta = 180 - alpha - gamma;
            }

            if (alpha==null && beta!=null && gamma!=null) {
                alpha = 180 - beta - gamma;
            }

            if (a==null && c!=null && alpha!=null && gamma!=null) {
                a = c*sin(alpha)/sin(gamma);
            }

            if (c==null && a!=null && alpha!=null && gamma!=null) {
                c = a*sin(gamma) / sin(alpha);
            }

            if (b==null && c!=null && beta!=null && gamma!=null) {
                b = c*sin(beta)/sin(gamma);
            }
            if(gamma==null && b!= null && c != null){
                gamma = asin(c*sin(beta) / b);

            }
            if(alpha == null && a!= null && gamma != null && c!= null){
                alpha = asin(a*sin(gamma) / c);
            }
            if(gamma == null && c!= null && alpha != null && a != null){
                gamma = asin(c*sin(alpha) / a);
            }
            if(b == null && a != null && c != null && beta != null){
                b = sqrt(pow(a,2) + pow(c, 2) - 2*a*c*(cos(beta)));
            }
            if(a != null && b!= null && c != null){
                umfang = a + b + c;
            }
        }

        System.out.println("Ergebnis: ");
        System.out.println("a: " + a);
        System.out.println("b: " + b);
        System.out.println("c: " + c);
        System.out.println("alpha: " + alpha);
        System.out.println("beta: " + beta);
        System.out.println("gamma: " + gamma);
        System.out.println("Umfang: " + umfang);





    }

    
    public static void main(String[] args) throws IOException {

    new Main().gui();

    }
}
Danke =)
 
T

tapped

Swing ist nicht dazu gedacht Grafiken (Dreiecke) in der Konsole auszugeben. Du kannst ein Bild/Image mit deinem Dreieck erzeugen https://examples.javacodegeeks.com/desktop-java/awt/drawing-an-image-example/ oder du erstellst ein Frame/Window mit entsprechenden Komponenten und zeichnest darauf https://stackoverflow.com/questions/29447994/how-do-i-draw-a-triangle-in-java
Okay, aber wenn ich jetzt eine neue Klasse neben der Main Klasse erstelle, welche ein Frame erstellt anlege, wie greife ich dann auf die benötigten Variablen (a, b, c, alpha, beta, gamma) zu?
 
O

Oneixee5

Du kannst die nötigten Werte z.B.: in einem eigenen Konstruktor übergeben oder mit Hilfe einer oder mehrere Methoden in das erzeugte Objekt übergeben/setzen. Üblicherweise würde man aber in dem grafischen Programm eine Eingabemöglichkeit vorsehen, z.B.: mit einem oder mehreren Textfeldern.
 
VPChief

VPChief

Hmm, ich weiss jetzt nicht so genau, aber wie wärs wenn du Variablen als static machst?

wäre so:

Java:
static yourvariable;
public class Main {
^^Das ist deine Main Klasse


Du kannst dann so drauf zugreigfen
(in deiner Frame Klasse)

Java:
public class Frame extends Main{
und dann an der Stelle wo du deine Variablen verwenden willst

Java:
Main main = new Main();
main.yourvariable();
funktioniert vielleicht, habs nicht getestet

EDIT: funktioniert nur wenn die Klassen im gleichen Package sind
 
Zuletzt bearbeitet:
J

JustNobody

Es könnte eine schöne Sache sein, die Berechnungen und so in einer eigenen Klasse zu haben.

So könntest Du eine Klasse Dreieck erstellen. Diese Klasse stellt nur die interne Speicherung eines Dreiecks mit den wichtigen Funktionalitäten da.
So speichert es die Längen der Seiten (a,b und c) sowie die Winkel
Funktionalitäten wären dann z.B. das Berechnen von Werten, sobald genug eingegeben wurde (1 Seite und 2 Winkel oder 2 Seiten und 1 Winkel oder 3 Seiten).
Das könnte man so machen, dass man z.B. die notwendigen Konstruktoren bereit stellt. Dann wäre ein Dreieck ähnlich wie ein String nicht veränderbar.
(Methoden würden dann neue Dreiecke erzeigen)
Wenn man das nicht möchte, dann muss man den Status überwachen und schauen, was für Veränderungen erlaubt werden.
Wenn die Seite C verändert wird: Was wird dann noch verändert? Die Werte stimmen auf jeden Fall nicht mehr:
a) Ich könnte aus den Seiten a, b und dem neuen c die Winkel neu berechnen.
b) Ich könnte aus dem neuen c + den Winkeln die Seiten a und b neu berechnen.

Bei den Wingeln ist es ähnlich: Was soll verändert werden, wenn ein Winkel sich ändert?
- die anderen Winkel müssen sich ändern, denn die Summe der Winkel muss ja 180° sein.
- die Länge der Seiten müssen sich irgendwie ändern ...
Hier muss man sich eine gute Logik überlegen.
Wenn man Dreiecke unveränderlich macht, dann erspart man sich da einiges.

Die Ein- und Ausgabe würde ich davon trennen (Abgesehen von einer toString Methode). Es gibt dann von mir aus ein Panel, das ein Dreieck zeichnen kann. Und das auch die Werte anzeigt... Das DreieckPanel oder so würde halt auf einem Dreieck operieren.

Die Oberfläche ist dann generell davon getrennt zu betrachten. Es gibt da dann typische Pattern, die man verwenden kann:
- MVC: Du hast ein Model (das könnte hier dein Dreieck sein), einen View (das wäre dann das Fenster mit Buttons und der Anzeige und einen Controller (Das ist dann sozusagen der Vermittler. Er sorgt dafür, dass die View gefüllt ist und hat die Aktionen, die in der View ausgeführt werden können...)
- MVVM:Hier ist es ähnlich wie bei MVC nur die Grenzen sind etwas anders gesteckt: Du hast wieder ein Model und dazu die View. Aber das Dritte ist das ViewModel, welches dann die Vermittlung übernimmt.
Diese Pattern schaut man sich ggf. aber ausführlich an, wenn das interessiert. Die Ausführung würde das Forum eher sprengen.
 
Thema: 

Java Swing - Dreieck zeichnen mit verschiedenen Variablen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben