Hallo,
ich bin neu hier und fange gerade erst mit JAVA an.
Ich hab hier eine Aufgabe vor mir liegen, die mir einiges an Kopfzerbrechen bereitet. Leider habe ich in 3 Wochen in den Fach Computergrafiken Prüfung, komme aber nicht so recht weiter.
Folgende Problemstellung:
Zu erstellen ist ein Histogramm, aus einer Text Datei die zwei Zeilen enthält.
Eine Bsp.-Textdatei ist gegeben:
2,4,30,220
30.34,90.09,40,20,70.5
Zur Erklärung der Textdatei steht folgendes dabei:
Die erste Zeile enthält vier Parameter, die für das Zeichnen des Histogramms notwendig sind.
- Die erste Zahl gibt den Abstand (in Pixel) des ersten Balkens vom linken Rand des Fensters an.
- Die zweite Zahl gibt den Abstand (in Pixel) zweier Balken an.
- Die dritte Zahl gibt die Breite (in Pixel) eines Balkens an.
- Die vierte und letzte Zahl gibt die Höhe (in Pixel) eines Balkens an, der den Wert 100(s. zweite Zeile), d.h. voll Ausdehnung hat.
sämtliche dieser vier Zahlen sind nichtnegative ganze Zahlen, die durch Kommata getrennt sind.
Die zweite Zeile enthält die Werte, die die Höhe der Balken bestimmt
- alle Werte liegen zwischen 0 und 100
- die einzelnen Werte sind ebenfalls durch ein Komma getrennt.
- Jeder Wert kann Nachkommastellen haben.
- der erste Wert steuert die Höhe des ersten Balken, der zweite die des zweiten usw.
- die Summe der Zahlen muss nicht 100 ergeben.
weitere Hinweise:
-Die Eingabedatei braucht nicht auf korrektes Format überprüft zu werden.
- Ein String s wandeln sie folgendermaßen in einen int-Wert: i=(new Integer(s)).integerValue();
Als Farbschema soll die Klasse Farbschema benutzt werden:
Ich habe jetzt mal angefangen, den Frame usw. aufzubauen. Nachfolgend mein Code:
Meine main-Routine lautet folgendermaßen:
Der Frame passt soweit, die Dateiortrückgabe ins JTextField kann man vielleicht auch anders bzw. einfacher realisieren.
Meine Überlegungen gehen dahin, dass ich ein zeilenweises Einlesen der Datei mithilfe des BufferedReaders benötige und dann den Buffer irgendwie einteilen kann, damit ich mit g.fillRect die benötigten Startwerte bekomme. Int x und int y sind ja aus der Textdatei gegeben und die Breite wird auch vom Textfile mitgeliefert.
Die Höhe der einzelnen Balken würde sich ja dann aus den 220*"0.(Zahl in Zeile 2)" ergeben.
Im Internet hab ich was mit StringTokenizer gefunden, allerdings komme ich da auch nicht weiter.
Wär echt spitze, wenn vielleicht einer zufällig nen Weg aus meiner Misere wüsste
Vielen Danke schonmal!
Tobi
ich bin neu hier und fange gerade erst mit JAVA an.
Ich hab hier eine Aufgabe vor mir liegen, die mir einiges an Kopfzerbrechen bereitet. Leider habe ich in 3 Wochen in den Fach Computergrafiken Prüfung, komme aber nicht so recht weiter.
Folgende Problemstellung:
Zu erstellen ist ein Histogramm, aus einer Text Datei die zwei Zeilen enthält.
Eine Bsp.-Textdatei ist gegeben:
2,4,30,220
30.34,90.09,40,20,70.5
Zur Erklärung der Textdatei steht folgendes dabei:
Die erste Zeile enthält vier Parameter, die für das Zeichnen des Histogramms notwendig sind.
- Die erste Zahl gibt den Abstand (in Pixel) des ersten Balkens vom linken Rand des Fensters an.
- Die zweite Zahl gibt den Abstand (in Pixel) zweier Balken an.
- Die dritte Zahl gibt die Breite (in Pixel) eines Balkens an.
- Die vierte und letzte Zahl gibt die Höhe (in Pixel) eines Balkens an, der den Wert 100(s. zweite Zeile), d.h. voll Ausdehnung hat.
sämtliche dieser vier Zahlen sind nichtnegative ganze Zahlen, die durch Kommata getrennt sind.
Die zweite Zeile enthält die Werte, die die Höhe der Balken bestimmt
- alle Werte liegen zwischen 0 und 100
- die einzelnen Werte sind ebenfalls durch ein Komma getrennt.
- Jeder Wert kann Nachkommastellen haben.
- der erste Wert steuert die Höhe des ersten Balken, der zweite die des zweiten usw.
- die Summe der Zahlen muss nicht 100 ergeben.
weitere Hinweise:
-Die Eingabedatei braucht nicht auf korrektes Format überprüft zu werden.
- Ein String s wandeln sie folgendermaßen in einen int-Wert: i=(new Integer(s)).integerValue();
Als Farbschema soll die Klasse Farbschema benutzt werden:
Code:
import java.awt.Color;
public class Farbschema{
private Color[] schema;
public Farbschema(){
schema = new Color[8];
schema[0] = new Color.red;
schema[1] = new Color.blue;
schema[2] = new Color.green;
schema[3] = new Color.yellow;
schema[4] = new Color.cyan;
schema[5] = new Color.magenta;
schema[6] = new Color.black;
schema[7] = new Color.pink;
}
Color get Color(int farbIndex){
int anz=schema.length;
int pos=farbIndex%anz;
return schema[pos];
}
}
Ich habe jetzt mal angefangen, den Frame usw. aufzubauen. Nachfolgend mein Code:
Code:
import java.util.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.JFileChooser;
import java.awt.event.*;
import java.io.*;
public class HistoPanel extends JPanel{
private JTextField speicherort = new JTextField(" ",80);
private Farbschema fs;
public HistoPanel(Container c, Farbschema f){
fs=f;
JButton bb=new JButton("Beenden");
JButton eb=new JButton("Erstellen");
JButton dw=new JButton("Datei waehlen");
setBackground(Color.white);
JPanel dp=new JPanel();
JPanel bp1=new JPanel();
JPanel bp2=new JPanel();
c.add(this,"Center");
c.add(dp,"South");
dp.setLayout(new GridLayout(5,1));
bp1.setLayout(new GridLayout(1,2,10,10));
bp2.setLayout(new GridLayout(1,2,10,10));
dp.add(new Label("Dateiname: "));
dp.add(speicherort);
WachDienst wD = new WachDienst();
WachHund wH = new WachHund();
bb.addActionListener(wD);
eb.addActionListener(wD);
dw.addActionListener(wH);
bp1.add(dw);
bp1.add(new Label(" "));
dp.add(bp1);
dp.add(new Label(" "));
bp2.add(eb);
bp2.add(bb);
dp.add(bp2);
}
public void paintComponent(Graphics g){
}
public class WachDienst implements ActionListener{
public void actionPerformed(ActionEvent e){
String command= e.getActionCommand();
if (command.equals("Beenden")) System.exit(0);
else if (command.equals("Erstellen")){
repaint();
}
}
}
public class WachHund implements ActionListener{
public void actionPerformed(ActionEvent evt){
JFileChooser fc= new JFileChooser("c:");
int returnVal = fc.showOpenDialog(getParent());
if (returnVal == JFileChooser.CANCEL_OPTION)
System.out.println("Dialog abgebrochen");
else
speicherort.setText(""+fc.getSelectedFile().getPath()+fc.getSelectedFile().getName());
}
}
public class FileReader{
public FileReader(String fc.getSelectedFile()){
FileReader fr = new FileReader(fc.getSelectedFile());
char[] buffer = new char[128];
File readfile = new File(fc.getSelectedFile());
if (readfile.exists()){
FileReader fr = new FileReader(readfile);
fr.read(buffer,0,100);
fr.close();
}
catch (Exception ex){
System.out.println("Problem"+readfile.getName());
}
}
else{
System.out.println("File not found"+readfile.getName());
}
System.out.print("Buffer>");
for (int i = 0; i< buffer.length; i++){
System.out.print(buffer[i]);
}
System.out.print("<Buffer");
}
Meine main-Routine lautet folgendermaßen:
Code:
import SimpleFrame.*;
import javax.swing.*;
import java.awt.*;
public class HistoFrame extends SimpleFrame{
public HistoFrame(){
setSize(300,300);
new HistoPanel(getContentPane(),new Farbschema());
setTitle("Histogramm");
showIt();
}
public static void main(String[] args){
HistoFrame hf= new HistoFrame();
}
}
Der Frame passt soweit, die Dateiortrückgabe ins JTextField kann man vielleicht auch anders bzw. einfacher realisieren.
Meine Überlegungen gehen dahin, dass ich ein zeilenweises Einlesen der Datei mithilfe des BufferedReaders benötige und dann den Buffer irgendwie einteilen kann, damit ich mit g.fillRect die benötigten Startwerte bekomme. Int x und int y sind ja aus der Textdatei gegeben und die Breite wird auch vom Textfile mitgeliefert.
Die Höhe der einzelnen Balken würde sich ja dann aus den 220*"0.(Zahl in Zeile 2)" ergeben.
Im Internet hab ich was mit StringTokenizer gefunden, allerdings komme ich da auch nicht weiter.
Wär echt spitze, wenn vielleicht einer zufällig nen Weg aus meiner Misere wüsste

Vielen Danke schonmal!
Tobi