Forum » Programiranje » 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ž
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
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...
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Java] Nova nit znotraj JPanel.paintComponent()Oddelek: Programiranje | 1945 (1732) | alexa-lol |
» | Vodni udar (java)Oddelek: Programiranje | 1391 (1089) | Nuke_H2 |
» | [Java] Deljenje in ostanekOddelek: Programiranje | 3086 (2670) | pr2501 |
» | [NALOGA][Java] Težave pri pisanju slikarjaOddelek: Programiranje | 2290 (1932) | l0g1t3ch |
» | tomcat - problem z encodingomOddelek: Programiranje | 2345 (2259) | kopernik |