Werte in Koordinatensystem zeichnen

Status
Nicht offen für weitere Antworten.
G

Gast

Gast
Hallo,

ich bin noch relativ neu im Java-Geschehen und habe folgendes Problem. Ich bin dabei ein Programm zu schreiben welches mittels einer API Messwerte ausliest, abspeichert und schlieslich in ein Koordinatensystem zeichnen soll.

Die Messwerte kann ich lesen und auch speichern. Auch ein Koordinatensystem hbae ich malen können nur im zusammenspiel zeigt er mir nichts an. Es tauchen während des ausführens/kompilierens keine Fehler auf und der Debugger läuft wie erwartet durch das Programm. Wenn ich alle Messwerte in der Konsole ausgeben lasse, glückt auch das. Was mache ich also falsch, dass ich keine Ausgabe bekomme?

Mein Programm ist in folgende 3 Dateien gesplittet: Main.java (Fenster, API, Benutzerauswahl), DrawPanel (um in Main ein DrawPanel-Objekt zu erzeugen und auch darauf zu malen) und Values.java (dort werden die Messdaten gespeichert).

DrawPanel.java
Code:
imports... [...]

public class DrawPanel extends JPanel {
    
    private static float PAD = 20, SPAD = 3, maxX = 10, maxY = 4;
    private static int startTime = 0, endTime = 10;
    private float inXa, inXb, inYa, inYb;
    private float x1, x2, y1, y2;
    private static Graphics g3;
    private static Graphics2D g2;
    
    public DrawPanel() {
    }
    
    public static Graphics getG() {
        return g3;
    }
    
    public void drawPoints(float inXa, float inYa, float inXb, float inYb) {
        int w = getWidth(), h = getHeight();
        float xInc = (float)(w - 2*PAD)/(2*maxX);
        float yInc = (float)(h - 2*PAD)/(2*maxY);
        Graphics2D g2 = (Graphics2D)g3;
        g2.setPaint(Color.red);
        g2.draw(new Line2D.Double(inXa*xInc + PAD, PAD + (maxY*2 - inYa)*yInc, inXb*xInc + PAD, PAD + (maxY*2 - inYb)*yInc)); 
    }
            
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g3 = g;
    }
    
    public void paintComponent(float inXa, float inYa, float inXb, float inYb){
        this.inXa = inXa;
        this.inXb = inXb;
        this.inYa = inYa;
        this.inYb = inYb;
    }    
}

Main.java
Code:
import try_02.DrawPanel;
import try_02.Values;

public class Main extends JFrame implements ActionListener, ItemListener, WindowListener {

    DrawPanel canvas = new DrawPanel ();

    public static void main(String[] args) {

        Main mainWindow = new Main ();

    }

    public Main() {
        
        super(" JAVA-Tool");

	setLayout(gridbag);

	addComponent(canvas, 1, 3, 5, 1, 25, 100, GridBagConstraints.BOTH,GridBagConstraints.CENTER);

        setVisible(true);

    }

    private void addComponent(Component component, int gridx, int gridy, int gridwidth, int gridheight, int weightx, int weighty, int fill, int anchor) {
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.gridx = gridx;
        constraints.gridy = gridy;
        constraints.gridwidth = gridwidth;
        constraints.gridheight = gridheight;
        constraints.weightx = weightx;
        constraints.weighty = weighty;
        constraints.fill = fill;
        constraints.anchor = anchor;
        constraints.ipadx = 2;
        constraints.ipady = 0;
        constraints.insets = new Insets(0, 0, 5, 0);
        gridbag.setConstraints(component, constraints);
        add(component);
    }

    public void actionPerformed(ActionEvent evt) {
        
        Object source = evt.getSource();

	if( source == field) {

		werte werden in values[i] gespeichert, jeder Punkt (X/Y) in eigenen array

                i=1;
                while (i < try_02.Values.getValueNumber() ) {
                      canvas.paintComponent(value[i-1].getX(),value[i-1].getY(),value[i].getX(),value[i].getY());
                      i++;
                }

		repaint();

   }

Natürlich habe ich jetzt - meines erachtens nach überflüssigen - Code weg gelassen.

Vielen Dank für eure Mühe
 
G

Gast2

Gast
1. rufst du nie drawPoint auf
2. warum sind alle atributte static
3. wie du deine paint Component überschreibst ist schwachsinnig
4. für was ist das repaint gedacht??
 
G

Guest

Gast
Danke schonmal.

drawPoint rufe ich eigtl hier auf:

Code:
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g3 = g;
        drawPoints(inXa,inYa,inXb,inYb);
    }

Wieso das beim kopieren verloren ging ist mir schleierhaft. Enschuldigung.

Das repaint() ist dazu da um Änderungen an einer Combobox sowie 2 Textfeldern wirksam zu mache. Wie gesagt ist das nur ein Ausschnitt des gesamten Codes.

Was verstehst du unter Schwachsinn? Ich bin wie gesagt noch Neuling. Generell tue ich das aber damit alles mitwächst/schrumpft wenn der User das Fenster skaliert.
 
G

Gast2

Gast
lass dir mal deine inXa,inYa,inXb,inYb ausgeben was die für werte haben

EDTI: du musst deine messpunkte in einem array speichern und dieses jedes mal bei paintComoponent aufrufen...sonst wirst du nie was sehen
 
G

Guest

Gast
Hallo,

ich bin mittlerweile soweit das ich einzelene Linien malen kann und diese auch dargestellt werden, im zusammenspiel funktioniert es dennoch nicht. Graphics g scheint nacher leer (null) zu werden, was sonst nie der Fall war. Das Fenster ist extrem ausgelastet und zeigt folglich garnichts mehr an.

Das überarbeitetete, nicht funktionsfähige, Werk:

Main.Java
Code:
                Schleife zum einlesen der Werte (klappt wunderbar) {
                                    canvas.setNewPoint(rtime.getVal(), fvalue.getVal(), i);
                                    i++;
                         }
                        
                        canvas.setArrayLenght(try_02.Values.getValueNumber());

DrawPanel.Java
Code:
public class DrawPanel extends JPanel {
    
    private static float PAD = 20, SPAD = 3, maxX = 10, maxY = 4;
    private static int startTime = 0, endTime = 10, lenght = 0;
    private float inXa, inXb, inYa, inYb;
    private float x1, x2, y1, y2;
    public static Values[] point = new Values[100];
    
    /** Creates a new instance of DrawPanel */
    public DrawPanel() {
    }
    
    public void setNewPoint(float inX, float inY, int i) {
        point[i] = new Values();
        point[i].setX(inX);
        point[i].setY(inY); 
    }
    
    public static void setArrayLenght(int inLenght) {
        lenght = inLenght;
    }
    
    public void drawPoints(Graphics g) {
        int w = getWidth(), h = getHeight();
        float xInc = (float)(w - 2*PAD)/(2*maxX);
        float yInc = (float)(h - 2*PAD)/(2*maxY);
        Graphics2D g2 = (Graphics2D)g;
        g2.setPaint(Color.red);
        int i = 0;
        while( i < lenght ) {
            i++;
            g2.draw(new Line2D.Double(point[i-1].getX()*xInc + PAD, PAD + (maxY*2 - point[i-1].getY())*yInc, point[i].getX()*xInc + PAD, PAD + (maxY*2 - point[i].getY())*yInc)); 
        }
    }
    
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        // paintGrid(g);
        drawPoints(g);
    }
    
    public void paintComponent(float inXa, float inYa, float inXb, float inYb){
        this.inXa = inXa;
        this.inXb = inXb;
        this.inYa = inYa;
        this.inYb = inYb;
    }    
}

Values.Java
Code:
/**                                                                     *
  *      This File is for saving the values of the scenarios object     *
  *      temporary to the proccess. Do not modify anything              *
  *                                                                     **/
package try_02;

import try_02.DrawPanel;

public class Values {

    private static float maxValue = 0, minValue = 0;
    private static int valueNumber = 0;
    private float x = 0;
    private float y = 0;
    
    public Values() {

    }
    
    public void setX(float input) {
        x = input;
        valueNumber++;
    }
    
    public void setY(float input) {
        y = input;
    }
    
    public static int getValueNumber() {
        return valueNumber;
    }
    
    public static float getMaxValue() {
        return maxValue;
    }
    
    public static float getMinValue() {
        return minValue;
    }
    
    public float getX() {
        return x;
    }
    
    public float getY() {
        return y;
    }
    
}

Vielen Danke für die bisherige und hoffentlich folgende Hilfe
 
G

Gast2

Gast
Also du solletst so wenig wie möglich in der paintComponent rechnen und das schon davor erledigen und der paint Methode nachher nur eine ArrayList deiner Linien die du zeichnen willst geben.

EDIT: und zweistens du malst nie Punkte(points) also wirst auch nie welche sehen
 
G

Guest

Gast
Danke für die schnelle antwort.

Male ich nicht genau hier?:
Code:
        while( i < lenght ) {
            i++;
            g2.draw(new Line2D.Double(point[i-1].getX()*xInc + PAD, PAD + (maxY*2 - point[i-1].getY())*yInc, point[i].getX()*xInc + PAD, PAD + (maxY*2 - point[i].getY())*yInc));
        }

Und das mit dem rechnen kann ich wohl kaum umgehen da ich ja möchte das sich die Zeichnung immer verhältnismäßig dem Fenster anpasst (w und h). Sicherlich würden mir Threads helfen oder?
 
G

Gast2

Gast
natürlich kannst du das rechnen umgehen... wenn panel größer oder kleiner wird ein Listener drauf legen

ja ich denke mal dass du zeichnest aber das kannst auch direkt in der paintComponent methode machen.
aber was deine schleife macht muss man nicht verstehen oder??
du hättest nur eine for schleife machen sollen die solange läuft wie dein array noch elemente hat und die elemente soll er dann zeichnen
 
G

Guest

Gast
Wie denn das? Mein Array hat mehr Elemente als Punkte da ich ja erst weis wie viele Punkte es sind wenn ich die Messwerte (deren Anzahl variiert) ausgelesen habe :?
 
G

Gast2

Gast
1. malst du grad linien und keine punkte...
2. warum sollte dein array mehr punkte haben als du hast :?: :?: :?: !!!!!
du sollst nur die punkte rein nehmen die du wirklich zeichnen willst dein array muss ja nicht konstant sein , es kann sich ja im laufe der zeit ändern....des macht deiner schleife aber nichts :!: :!: :!:
 
G

Guest

Gast
Weil ich wenn ich das Array erstelle, ihm eine Größe von 100 zuweise und alle Array-Felder von 0 bis 100 den Wert 0 erhalten oder sehe ich das Falsch? Und wenn ich nun alle Elemente des Arrays ausgeben lasse habe ich 100 Punkte, was wiederrum 50 Linien macht obwohl ich vlt nur 20 Werte also 10 Linien habe.

Ich lasse mich aber gerne belehren, denn wie gesagt bin ich noch totaler Neuling.

Vielen Dank für deine Geduld
 
G

Gast2

Gast
Code:
ArrayList list =new ArrayList();
Linien2D linie

for(int i=0;i<list.size();i++)
{
linie=(Linien2D)list.get(i);
g.draw.......
}


und wenn du jetzt noch PUNKTE,RECHTECKE, usw. zeichnen willst kannst die auch in einen eigenes Arrayschreiben

ich weiß nicht ob es size() oder length() ist musste nachschauen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C JFreeChart X-Achse Werte skalieren, begrenzen, zoomen AWT, Swing, JavaFX & SWT 5
D ObservableList Werte hinzufügen AWT, Swing, JavaFX & SWT 7
missy72 JavaFX TableView / TableColumn / ObservableList / zwei Werte in einer Zelle AWT, Swing, JavaFX & SWT 2
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
P Adressbuch Werte speichern AWT, Swing, JavaFX & SWT 21
Blender3D Falsche Werte mit Java Toolkit Screensize AWT, Swing, JavaFX & SWT 4
B JavaFX JavaFX TableView PropertyValueFactory für Werte aus HashMap AWT, Swing, JavaFX & SWT 2
F RGB-Werte aus einem String einlesen AWT, Swing, JavaFX & SWT 26
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Arif Swing MouseMotionListener liefert falsche Werte ? AWT, Swing, JavaFX & SWT 7
G Werte aus dem GUI Auslesen AWT, Swing, JavaFX & SWT 8
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
B JavaFX Werte aus eingefügtem Window lesen AWT, Swing, JavaFX & SWT 0
Augenblau JavaFX Wechselnde Werte in Label darstellen AWT, Swing, JavaFX & SWT 7
M Swing JFreechart zoom x-achse neue Werte AWT, Swing, JavaFX & SWT 4
P Swing JTable Werte auslesen bzw überschreiben AWT, Swing, JavaFX & SWT 5
L JTable Werte mulitiplizieren AWT, Swing, JavaFX & SWT 3
R AWT Werte aus NumberField vergleichen AWT, Swing, JavaFX & SWT 9
H org.eclipse.swt.widgets.Slider und negative Werte AWT, Swing, JavaFX & SWT 3
S ComboBox-Werte aus einem Array an Textfields übergeben AWT, Swing, JavaFX & SWT 3
N Input/Output Stream werte in Label anzeigen. AWT, Swing, JavaFX & SWT 6
F JavaFX Properties und NULL Werte AWT, Swing, JavaFX & SWT 2
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
A Swing Bestimmte Werte anzeigen JSlider() AWT, Swing, JavaFX & SWT 2
T label überschriebt seine werte-SWT AWT, Swing, JavaFX & SWT 3
E werte zurück in GUI schreiben AWT, Swing, JavaFX & SWT 4
S JTable - 2D ArrayList & Falsche Werte. AWT, Swing, JavaFX & SWT 3
E werte aus List auslesen AWT, Swing, JavaFX & SWT 2
C Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen AWT, Swing, JavaFX & SWT 5
E Listener, werte in andere Klasse übernehmen AWT, Swing, JavaFX & SWT 11
K JTable Werte auslesen AWT, Swing, JavaFX & SWT 2
K JComboBox: Beim Einfügen neuer Werte ItemStateChanged blocken. AWT, Swing, JavaFX & SWT 2
Z Swing Mittels GUI Werte aus Property-File ändern AWT, Swing, JavaFX & SWT 5
S Swing Werte einer Jcheckbox aus eine Klasse A in eine Klasse B aufrufen AWT, Swing, JavaFX & SWT 6
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
B Die Werte von getLocation() im Label anzeigen AWT, Swing, JavaFX & SWT 4
J Swing jSlider nur auf bestimmte werte beschränken AWT, Swing, JavaFX & SWT 15
J JDialog verliert Werte AWT, Swing, JavaFX & SWT 3
T JTextField nur Double werte eingeben AWT, Swing, JavaFX & SWT 2
D Swing JTable Werte AWT, Swing, JavaFX & SWT 2
J Werte aus Combobox speichern AWT, Swing, JavaFX & SWT 3
F Swing JList doppelte werte AWT, Swing, JavaFX & SWT 3
A Swing JFrame Werte aus JDialog übergeben AWT, Swing, JavaFX & SWT 4
E Jtable Werte ohne Enter übernehmen AWT, Swing, JavaFX & SWT 9
F JComboBox gibt falsche werte AWT, Swing, JavaFX & SWT 3
P getMousePosition(): andere Werte als erwartet AWT, Swing, JavaFX & SWT 4
D Comboboxen werte Falsch. AWT, Swing, JavaFX & SWT 2
A TableRowSorter für double Werte mit Formatierung AWT, Swing, JavaFX & SWT 3
M Comboboxen in JTable - Werte auslesen AWT, Swing, JavaFX & SWT 9
calzone Swing JTable, Werte aktualisieren klappt nicht! AWT, Swing, JavaFX & SWT 7
R Swing JTable, werte speichern und laden AWT, Swing, JavaFX & SWT 25
G Alle Werte einer Spalte in JTable zusammenrechnen AWT, Swing, JavaFX & SWT 2
S JTable Werte werden nicht übernommen AWT, Swing, JavaFX & SWT 2
C Werte aus der Tabelle lesen AWT, Swing, JavaFX & SWT 4
K JSpinner - Model <-> View, unterschiedliche Werte AWT, Swing, JavaFX & SWT 9
A Werte in ein Textfeld übernehmen AWT, Swing, JavaFX & SWT 4
L JTextField Umwandeln in double-Werte AWT, Swing, JavaFX & SWT 5
P Bei Buttons Werte übergeben AWT, Swing, JavaFX & SWT 2
G eingegebene Werte einer JTable prüfen? Bitte helfen AWT, Swing, JavaFX & SWT 5
G ComboBox Werte auslesen uns setzen AWT, Swing, JavaFX & SWT 6
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
loadbrain auslesen der Werte dynamischer Textfields AWT, Swing, JavaFX & SWT 21
T JTextField, der nur Werte zwischen 100 und 1000 zulässt AWT, Swing, JavaFX & SWT 28
M Ich habe Werte und Brauche Grafik! AWT, Swing, JavaFX & SWT 3
P Double-Werte sortieren mit TableRowSorter AWT, Swing, JavaFX & SWT 2
L Farbregler - Werte als Zahl ausgeben - Color AWT, Swing, JavaFX & SWT 5
K JTree: Werte in Blätter speichern? AWT, Swing, JavaFX & SWT 8
K JSpinner Werte verschwinden bei Panel Wechsel AWT, Swing, JavaFX & SWT 2
raptorrs J2D paintComponent: Nur ganzzahlige (-int) Werte möglich? AWT, Swing, JavaFX & SWT 3
P JDialog Werte auslesen AWT, Swing, JavaFX & SWT 2
V Werte mehreren Checkboxes zuweisen AWT, Swing, JavaFX & SWT 3
V Werte aus TextField in eine andere Klasse? AWT, Swing, JavaFX & SWT 2
T Werte aus JTable auslesen AWT, Swing, JavaFX & SWT 10
B Eingabefelder nur für bestimmte Werte AWT, Swing, JavaFX & SWT 8
L JavaFX KoordinatenSystem AWT, Swing, JavaFX & SWT 1
M Koordinatensystem für Projektorientiertes Arbeiten AWT, Swing, JavaFX & SWT 2
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5
S Koordinatensystem wird nicht gezeichnet AWT, Swing, JavaFX & SWT 5
J Koordinatensystem AWT, Swing, JavaFX & SWT 2
S Koordinatensystem AWT, Swing, JavaFX & SWT 6
El_Lobo Swing bei Update von Graphik Koordinatensystem nicht jedesmal neu zeichnen AWT, Swing, JavaFX & SWT 2
K OpenGL koordinatensystem AWT, Swing, JavaFX & SWT 7
M Graphics auf JFrame Koordinatensystem AWT, Swing, JavaFX & SWT 3
U Swing KSKB: JComboBox Koordinatensystem AWT, Swing, JavaFX & SWT 3
L SWT Draw2d und Gef Koordinatensystem und Gitternetz? AWT, Swing, JavaFX & SWT 5
L SWT Koordinatensystem in Swt? AWT, Swing, JavaFX & SWT 4
S AWT Schiffeversenken-Koordinatensystem wird nicht richtig angezeigt. AWT, Swing, JavaFX & SWT 6
C AWT Graphic 2D Frage zum Koordinatensystem AWT, Swing, JavaFX & SWT 6
M Aktuelle Mausposition im Koordinatensystem AWT, Swing, JavaFX & SWT 3
H Darstellung einer Kurve im Koordinatensystem AWT, Swing, JavaFX & SWT 8
L Java 3d Koordinatensystem AWT, Swing, JavaFX & SWT 3
D JPanel Koordinatensystem -> Ursprung verändern. AWT, Swing, JavaFX & SWT 2
C Koordinatensystem drehen AWT, Swing, JavaFX & SWT 3
G Linien in ein Koordinatensystem zeichen AWT, Swing, JavaFX & SWT 7
H funktionen in ein koordinatensystem zeichen AWT, Swing, JavaFX & SWT 5
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben