Habe da ein Programm das ein Balkendiagramm zeichnet. Die Werte für das Balkendiagramm werden über eine *.txt (Auswahl mittels FileDialog) eingelesen. Die Werte in der *.txt stehen untereinander, z.B.: 25, 50, usw.
Wenn ich das Programm jetzt starte und Daten einlese, erscheint das Balkendiagramm aber nur ganz kurz im Frame und verschwindet sofort wieder.
Hat jemand eine Idee an was das liegen könnte?
Wenn ich das Programm jetzt starte und Daten einlese, erscheint das Balkendiagramm aber nur ganz kurz im Frame und verschwindet sofort wieder.
Hat jemand eine Idee an was das liegen könnte?
Code:
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
public class Balkendiagramm3 extends Frame implements ActionListener
{
private MenuItem mLesen;
// Diese Werte stehen jetzt in einer Datei und sollen eingelesen werden:
// int[] data = {15, 8, 45, 74, 60, 20, 33};
int[] data = new int[100];
private void loadFile(String Name)
{
String buffer = null;
int i = 0;
try
{
BufferedReader br = new BufferedReader(new FileReader(Name));
while ((buffer = br.readLine()) != null)
{
data[i++] = Integer.parseInt(buffer);
System.out.println(">> " + buffer); //debug
}
br.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public Balkendiagramm3(String title)
{
super(title);
setSize(400, 300);
setLayout(null);
MenuBar mb = new MenuBar();
Menu m = new Menu("Daten einlesen");
mLesen = new MenuItem("Öffnen");
m.add(mLesen);
mLesen.addActionListener(this);
mb.add(m);
setMenuBar(mb);
setVisible(true);
}
private void ShowFileSelectBox(int load_save)
{
FileDialog Dir = new FileDialog(this, "Filename?", load_save);
Dir.setDirectory(".");
Dir.setVisible(true);
String Name = Dir.getFile();
if (Name != null)
{
if (load_save == FileDialog.LOAD)
{
loadFile(Dir.getDirectory() + Name);
balkendiagrammAnzeigen(data, getGraphics());
}
else System.out.println("Sichern nicht implementiert");
}
}
public void actionPerformed(ActionEvent event)
{
if (event.getSource() == mLesen) ShowFileSelectBox(FileDialog.LOAD);
}
private int sucheGroessterWert(int[] data)
{
int groessterWert = data[0];
for (int zaehler = 0; zaehler < data.length; zaehler++)
{
if (data[zaehler] > groessterWert) groessterWert = data[zaehler];
}
return groessterWert;
}
private int[] skaliereWerte(int[] data, int groessterWert, int yHoehe)
{
int[] newArray = new int[data.length];
for (int zaehler = 0; zaehler < data.length; zaehler++)
{
newArray[zaehler] = data[zaehler] * yHoehe / groessterWert;
}
return newArray;
}
public void balkendiagrammAnzeigen(int[] data, Graphics g)
{
int groessterWert;
int[] skalierteDaten = new int[data.length];
int yAnfang = 50;
int yHoehe = 200;
int xAnfang = 50;
int breite = 30;
int luecke = 10;
groessterWert = sucheGroessterWert(data);
skalierteDaten = skaliereWerte(data, groessterWert, yHoehe);
int x = xAnfang;
g.setColor(Color.red);
for (int zaehler = 0; zaehler < skalierteDaten.length; zaehler++)
{
g.fillRect(x, yAnfang + yHoehe - skalierteDaten[zaehler], breite,
skalierteDaten[zaehler]);
x = x + breite + luecke;
} setVisible(true);
}
public static void main(String[] args)
{
new Balkendiagramm3("Balkendiagramm mit Daten einlesen");
}
}