» »

Java - problem pri izrisu grafa

Java - problem pri izrisu grafa

Bavec87 ::

Lepo pozdravljeni! :)

Sem nov na forumu in imam težavo pri programiranju v Javi. Za diplomsko nalogo moram narediti neko simulacijo in se mi je zataknilo pri izrisu grafa v Swingu. Upal sem, da mi lahko kdo tukaj z bolj bogatimi izkušnjami malo pomaga.
Program se sledeč:

import javax.swing.*;

class GUI_dva_razreda {

public static void main(String[] args) {
GUI_dva_razreda_koda_za_GUI window = new GUI_dva_razreda_koda_za_GUI();
double [] argument;
double [] argument1;

argument = new double [9];
argument [0]=1;
argument [1]=40;
argument [2]=10;
argument [3]=1;
argument [4]=40;
argument [5]=10;
argument [6]=1;
argument [7]=40;
argument [8]=10;
argument1 = window.values;


double rezultat = window.produkt(argument);

System.out.println(rezultat);

window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);




}
}

--------

// Datoteka : GUI_dva_razreda_koda_za_GUI.java
// Namen : To je JFrame podrazred v ločeni datoteki


import javax.swing.*;

public class GUI_dva_razreda_koda_za_GUI extends JFrame {




public double[] values = {
50, 200, 180, 100, 300, 40, 208, 338, 300, 234, 324
};





//========================================= constructor
public GUI_dva_razreda_koda_za_GUI() {
//... nastavimo lastnosti okna
this.setTitle("Izris grafa");

this.setSize(maxx, maxy);

String[] names = new String[3];



names[0] = "10";


names[1] = "20";


names[2] = "30";





PanelY ccc; // deklariram objekt ccc razreda panelX
ccc = new PanelY(values,names,"Graf"); // ustvarim nov objekt ccc razreda panelX
this.add(ccc); // temu objektu (konstruktorskemu) dodamo ccc, ki je panelX




}
double spremenljivka;
double posreduj;
int maxx = 700;
int maxy = 400;
double [] values1 ;




public double produkt (double values []){




for(int i = 0; i < values.length; i++) {

if(values[i] > spremenljivka)
spremenljivka = values[i];

}
return spremenljivka; //dobimo najvišjo vrednost v array


}

}

----------

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PanelY extends JPanel {
private double[] values;

private String[] names;

private String title;







public PanelY(double[] v, String[] n, String t) {
names = n;
values = v;
title = t;
}

public void paintComponent(Graphics g) {

double minValue = 0; // imamo minimalno število
double maxValue = 0; // imamo maximalno število
for (int i = 0; i < values.length; i++) {
if (minValue > values[i])
minValue = values[i];
if (maxValue < values[i])
maxValue = values[i];
}


Dimension d = getSize();
int clientWidth = d.width;


Font titleFont = new Font("SansSerif", Font.BOLD, 20);
FontMetrics titleFontMetrics = g.getFontMetrics(titleFont);
Font labelFont = new Font("SansSerif", Font.PLAIN, 10);


int titleWidth = titleFontMetrics.stringWidth(title);
int y = titleFontMetrics.getAscent();
int x = (clientWidth - titleWidth) / 2;
g.setFont(titleFont);
g.drawString(title, x, y);



g.setFont(labelFont);


double[] cas;
cas = new double [values.length];

double vrednost = 10;

for (int j = 0; j < values.length; j++) {
cas[j] = vrednost;
vrednost+=10;
}


for (int j = 0; j < values.length-1; j++) {

g.drawLine((int)cas[j],(int)values[j],(int)cas[j+1],(int)values[j+1]);
}
}
}

Torej imamo 3 classe, program na JPanel izriše daljice, ki naj bi bile neke vrste graf, podatke dobi iz array-a. Problem imam s tem, ker je izris narejen po principi left-to-right top-to bottom, se pravi, da je graf ravno obrnen na glavo, pa tudi koordinate bi rad naredli in na njih zapisal vrednosti, glede na najmanjšo in največjo vrednost v array-i. Največjo vrednost sem že dobil ven iz niza. Mi lahko kdo pokaže kako se to naredi ali pa vsaj kakšen napotek?

Že v naprej se vam zahvaljujem za pomoč. :)

Lp Blaž

nightrage ::

Zakaj bi se matral in odkrival toplo vodo, če pa lahko uporabiš free knjižnico
http://www.jfree.org/jfreechart/

lp, jerry

LeQuack ::

Risanje grafov sem jaz implementiral v eni od svojih seminarskih.



Izvorno kodo si snemi tu:
http://slo-tech.com/forum/t410623/p2699...
Quack !

Zgodovina sprememb…

  • spremenil: LeQuack ()

Bavec87 ::

Najlepša hvala obema. :) Bom malo pregledal zadeve, sem pa prepričan, da mi bo v pomoč. :)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Nova nit znotraj JPanel.paintComponent()

Oddelek: Programiranje
141813 (1600) alexa-lol
»

Vodni udar (java)

Oddelek: Programiranje
61336 (1034) Nuke_H2
»

[Java] Deljenje in ostanek

Oddelek: Programiranje
142916 (2500) pr2501
»

[NALOGA][Java] Težave pri pisanju slikarja

Oddelek: Programiranje
202143 (1785) l0g1t3ch
»

tomcat - problem z encodingom

Oddelek: Programiranje
72272 (2186) kopernik

Več podobnih tem