nybegynder i opgave i java
Hej... Jeg håber at kunne få lidt hjælp af jer eksperter i java da jeg er stallet i en opgave min lærer har stillet mig.Opgaven lyder på at jeg skal importere nogle data fra en xml fil over i et program min lærer delvist har skrevet og så få plottet disse data i en graf. Jeg kan godt køre programmet og få data ud, men de kommer ikke ud som et plot af en graf!
Kildekoden lyder således (det skal lige siges at fra kommentaren //tegn graf, har jeg selv en del af koden !.
Der kommer desuden et vindue op når man kører programmet hvor man skal indtaste sti navnet på filen.
package miniprojekt2;
import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.*;
// Klasse der åbner og læser regneakr data fra en Excel 2004 XML fil
class XML {
private final int COLS = 2;
private String filnavn = null;
private boolean aaben = false;
private BufferedReader in = null;
// Konstruktør - tager et filnavn som parameter
XML(String filnavn) {
this.filnavn = filnavn;
try {
in = new BufferedReader(new FileReader(filnavn));
aaben = in != null;
} catch (Exception e) {
aaben = false;
}
}
// Henter et data par fra en åben fil
public double[] hentData() {
if ( aaben ) {
try {
// Spring indledende linier over
String l = in.readLine().trim();
while ( ! l.startsWith("<Row>") ) {
l = in.readLine().trim();
}
// gå til første felt
l = in.readLine().trim();
double[] res = new double[COLS];
int i = 0;
// læs feltindhold
while ( l.startsWith("<Cell>") ) {
l = l.replaceAll("</Data.*>",""); // Fjerner afsluttende tags
l = l.replaceAll("<.*>",""); // Fjerner tags før data
if ( i < COLS ) {
res[i] = Double.parseDouble(l);
i++;
}
l = in.readLine().trim();
}
return res;
} catch (Exception e) {}
}
return null;
}
}
// Klasse der udskriver data fra fil som graf
class Graf {
private final boolean TEST = true;
Graf(String titel, XML data) {
double[] res = null;
ArrayList<double[]> list = new ArrayList<double[]>();
int maxx = 10;
int maxy = 110;
int minx = -10;
int miny = -1;
// Indlæs data og find maks og min værdier
do {
res = data.hentData();
if ( res != null ) {
if ( list.size() == 0 ) {
minx = (int)(res[0]-1.0);
maxx = (int)(res[0]+1.0);
miny = (int)(res[1]-1.0);
maxy = (int)(res[1]+1.0);
} else {
if ( minx > res[0] ) minx = (int)(res[0]-1.0);
else if ( maxx < res[0] ) maxx = (int)(res[0]+1.0);
if ( miny > res[1] ) miny = (int)(res[1]-1.0);
else if ( maxy < res[1] ) maxy = (int)(res[1]+1.0);
}
list.add(res);
}
} while ( res != null );
// Testudskrift: viser datapar
if ( TEST ) {
for (double[] e : list) {
for (int i=0; i<e.length; i++) {
System.out.print("\t"+e[i]);
}
System.out.println();
}
}
// Tegn graf
class Koordinatsystem extends JPanel {
private int [][] data;
private final int MAXX = 110;
private final int MINX = -1;
private final int MAXY = 10;
private final int MINY = -10;
private final int STEP = 5;
public Koordinatsystem(int [][] data) {
this.data = data;
}
public void paintCompnent(Graphics g) {
super.paintComponent(g);
double h = getHeight();
double w = getWidth();
double deltaX = w / (double) (MAXX - MINY);
double deltaY = h / (double) (MAXY - MINY);
double origoX = -(double) (MINX*deltaX);
double origoY = h +(double) (MINY*deltaY);
g.setColor(Color.RED);
g.drawLine((int)origoX,0,(int)origoX,(int)h-1);
g.drawLine (0,(int)origoY,(int)w-1,(int)origoY);
for (int i=(MINX/STEP)*STEP; i<=MAXX; i+=STEP){
g.drawLine(
(int) ((double)i*deltaX+origoX),(int)(origoY-5),
(int) ((double)i*deltaX+origoX),(int)(origoY+5));
}
for (int i=(MINY/STEP)*STEP; i<=MAXY; i+=STEP) {
g.drawLine(
(int) (origoX-5), (int)(origoY-((double)i*deltaY)),
(int) (origoX+5), (int)(origoY-((double)i*deltaY)));
}
g.setColor(Color.BLUE);
for (int i=1; i<data.length; i++) {
g.drawLine((int) ((double)data [i-1] [0]*deltaX+origoX),
(int) (origoY-((double)data[i-1][i]*deltaY)),
(int) ((double)data[i][0]*deltaX+origoX),
(int) (origoY-((double)data[i][1]*deltaY)));
}
}
}
}
}
// Klasse med brugergrænsefalde
class Bruger extends JPanel {
private JButton doitknap;
private JLabel prompt;
private JTextField inddatafelt;
// Konstruktør - klargør interaktivt vindue
Bruger() {
prompt = new JLabel();
inddatafelt = new JTextField();
doitknap = new JButton();
setLayout(null);
prompt.setText("Indtast filnavn:");
add(prompt);
prompt.setBounds(30, 20, 100, 30);
inddatafelt.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
inddata(evt);
}
});
add(inddatafelt);
inddatafelt.setBounds(130, 20, 240, 28);
doitknap.setText("Tegn graf");
doitknap.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
doit(evt);
}
});
add(doitknap);
doitknap.setBounds(160, 60, 97, 29);
}
// metode der kaldes når der trykkes på retur tast
private void inddata(java.awt.event.ActionEvent evt) {
}
// metode der kaldes når knap klikkes
private void doit(java.awt.event.ActionEvent evt) {
// hent filnavn
String filnavn = inddatafelt.getText();
// udfør visning af graf
if ( filnavn != null ) {
Graf graf = new Graf("Graf",new XML(filnavn));
}
}
}
// Programklasse
public class Miniprojekt {
public static void main(String[] args) {
// åben dialog der beder om inddatafil, etc.
JFrame f = new JFrame("Graf");
f.add(new Bruger());
// Program afsluttes når vinduet lukkes
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,140);
f.setVisible(true);
}
}