Danke, das wusste ich nicht...
Problem beginnt in Zeile 345, bin mir aber nicht sicher, ob es nicht vorher zu beheben ist.
Also nochmal in schön:
Problem beginnt in Zeile 345, bin mir aber nicht sicher, ob es nicht vorher zu beheben ist.
Also nochmal in schön:
Java:
import java.awt.*;
import java.awt.Color;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.util.Vector;
import java.io.*;
public class Prominence extends JPanel implements ActionListener {
/* Klasse fuer den Startbildschirm
*/
private class StartWindow extends JPanel implements ActionListener {
// Startbildschirm
JTextField _init;
JTextField _alter;
JTextField _sex;
JButton _start;
String _dateiname;
JLabel _begruessung;
// parent window
Prominence _prom;
/* Konstruktor der Klasse StartWindow
*/
public StartWindow(Prominence p) {
_prom = p;
_dateiname = new String("");
setSize(800,600);
setLayout(new GridBagLayout());
// GridLayout
GridBagConstraints c = new GridBagConstraints();
_begruessung = new JLabel("<html><style=\"margin-left:20px;white-space:normal;\">Herzlich Willkommen zum Perzeptionsexperiment!<br><br>Im Folgenden werden Sie jeweils zwei Saetze hoeren, die sich in ihrem Inhalt nicht unterscheiden, <br>wohl aber in ihrer Intonation. Sie koennen sich die Saetze mehrmals anhoeren, indem Sie auf den <br>Button klicken, auf dem der Satz in Orthographie steht. Dort ist auch ein Wort unterstrichen, auf <br>das Sie besonders achten sollen. Ihre Aufgabe ist es, mit dem Balken anzugeben, wie aehnlich <br>sich die Realisierungen des Wortes in den beiden Saetzen sind. <br>Ziehen Sie den Balken ganz nach oben, wenn sie genau gleich prominent sind und ganz nach <br>unten, wenn sie sich sehr unterscheiden. Wenn Sie Ihre Bewertung abegschlossen haben, <br>klicken Sie auf Weiter. <br><br>Viel Erfolg!<br><br><br><br></style></html>");
c.gridx=0;
c.gridy=0;
add (_begruessung,c);
// 2 Eingabefelder fuer die Statistik
JLabel text1 = new JLabel("Geben Sie bitte Ihre Initialen ein: ");
c.gridx=0;
c.gridy=1;
add(text1,c);
JLabel text2 = new JLabel("Geben Sie bitte Ihr Alter ein: ");
c.gridx=0;
c.gridy=2;
add(text2,c);
JLabel text3 = new JLabel ("Geben Sie bitte Ihr Geschlecht an (m oder w): ");
c.gridx=0;
c.gridy=3;
add(text3,c);
_init = new JTextField("",2);
c.gridx=1;
c.gridy=1;
add(_init,c);
_alter = new JTextField("",2);
c.gridx=1;
c.gridy=2;
add(_alter,c);
_sex = new JTextField("",1);
c.gridx=1;
c.gridy=3;
add(_sex,c);
// Beim Klick auf den Startbutton wird das Experiment gestartet
_start = new JButton("Experiment starten");
_start.addActionListener(this);
_start.setActionCommand("start_experiment");
c.gridx=2;
c.gridy=4;
add(_start,c);
}
/* Methoden um die Klassenvariablen auszulesen.
*/
public String Textfeld1Auslesen() {
String initialen = _init.getText();
return initialen;
}
public String Textfeld2Auslesen() {
String alter = _alter.getText();
return alter;
}
public String Textfeld3Auslesen() {
String sex = _sex.getText();
return sex;
}
public String holeDateiname() {
return _dateiname;
}
/* Hier wird der Dateiname aus den Initialen und dem Alter generiert,
die Datei geoeffnet und das Experiment gestartet */
public void actionPerformed(ActionEvent e) {
if("start_experiment".equals(e.getActionCommand())) {
// textfelder auslesen, dateiname generieren
String initialen = Textfeld1Auslesen();
String alter = Textfeld2Auslesen();
String sex = Textfeld3Auslesen();
// Dateinamen generieren
_dateiname = initialen + new String("_") + alter + new String ("_") + sex + new String(".txt");
try {
FileReader fr = new FileReader(_dateiname);
BufferedReader br = new BufferedReader(fr);
_dateiname = initialen + new String("_") + alter + new String ("_") + sex + new String ("_1") + new String(".txt");
try {
FileReader file = new FileReader(_dateiname);
BufferedReader buffered = new BufferedReader(file);
_dateiname = initialen + new String("_") + alter + new String ("_") + sex + new String("_2") + new String(".txt");
} catch (FileNotFoundException f) {
}
} catch (FileNotFoundException f) {
}
// experiment starten
_prom.startExperiment();
}
}
};
// Klasse fuer den Schlussbildschirm
private class Thanks extends JPanel implements ActionListener {
// parent window
Prominence _prom;
JLabel _danke;
// Konstruktor der Klasse Thanks
public Thanks(Prominence p) {
_prom = p;
setSize(800,600);
setLayout(new GridBagLayout());
// GridLayout
GridBagConstraints c = new GridBagConstraints();
_danke = new JLabel("<html>Vielen Dank, dass Sie an unserem Experiment teilgenommen haben.<br><br>Wenn Sie Informationen über die Ergebnisse bekommen wollen, schreiben Sie doch eine kurze Mail an: blablablubb@web.de</html>");
c.gridx=0;
c.gridy=0;
add(_danke,c);
JButton _schliessen = new JButton("Fenster schliessen");
_schliessen.setActionCommand("CLOSE");
_schliessen.addActionListener(this);
c.gridx=0;
c.gridy=1;
add(_schliessen,c);
}
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
System.exit(0);
}
}
// Experiment
private class Experiment extends JPanel implements ActionListener {
// Das Experiment-Design besteht aus dem Slider (von 0-100), dem Satz-Button und dem Weiter-Button
JSlider _slider;
JButton _satz;
JButton _weiter;
Prominence _prom;
/* Es werden zwei Vektoren erstellt, in die im Experiment aus der Datei test_description die wav-Files und die
zugehoerigen Saetze eingelesen werden
current_wav ist hierbei die aktuelle wav-Datei, deren zugeordneter Satz auf dem Satz-Button erscheint */
Vector _wav_files;
Vector _sentences;
Vector _bewertung;
int _current_wav;
// Konstruktor
public Experiment(Prominence p)
{
_prom = p;
_wav_files = new Vector();
_sentences = new Vector();
_bewertung = new Vector();
_current_wav = 0;
// datei mit zuordnung wav->Satz einlesen
readExperimentDescription("test_description.txt");
// Button mit erstem satz und erster datei initialisieren
setSize(800,600);
setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
// Beim Klick auf den Satz-Button wird die wav-Datei erneut abgespielt
_satz = new JButton((String)_sentences.elementAt(_current_wav));
_satz.setActionCommand("play_again");
c.weightx = 1.0;
c.gridx = 1;
c.gridy = 0;
add(_satz,c);
// Erstellung des Silders
_slider = new JSlider(JSlider.VERTICAL,0,100,50);
_slider.setBackground(Color.WHITE);
c.gridx=1;
c.gridy=1;
add(_slider,c);
/* Der Slider geht von 0 bis 100, Default ist 50. Auf diesen Wert wird er beim Klick auf den
Weiter-Button zurueckgestellt.
Der Wert, den die VP angegeben hat, wird in eine Datei gespeichert. */
_slider.setMajorTickSpacing(100);
_slider.setPaintTicks(true);
// Label Table wird erstellt
Hashtable labelTable = new Hashtable();
labelTable.put( new Integer( 0 ), new JLabel("Kein Unterschied") );
labelTable.put( new Integer( 100 ), new JLabel("Maximaler Unterschied") );
_slider.setLabelTable( labelTable );
_slider.setPaintLabels(true);
_weiter = new JButton("Weiter");
_weiter.setActionCommand("weiter");
c.gridx=2;
c.gridy=2;
add(_weiter,c);
_weiter.addActionListener(this);
_satz.addActionListener(this);
}
// Skript zum Abspielen der wav-Dateien
public void playCurrentWav() {
new AePlayWave((String)_wav_files.elementAt(_current_wav)).start();
}
// Die Textdatei, in der die wav-Dateien und die Saetze aufgelistet sind, wird eingelesen
public void readExperimentDescription(String filename) {
try {
BufferedReader in = new BufferedReader(new FileReader(filename));
String str;
while ((str = in.readLine()) != null) {
String[] splitted = str.split(" ",2);
/* Vektor _wav_files enthaelt das erste Element der Datei (Dateiname),
Vektor _sentences das zweite Element (Satz) */
_wav_files.addElement(splitted[0]);
_sentences.addElement(splitted[1]);
}
in.close();
} catch (IOException e) {
}
}
// Methoden zum Aufrufen der Bewertungen und der Wav-Dateien (als Strings)
public Vector holeBewertung() {
return _bewertung;
}
public Vector holeWavDateien () {
return _wav_files;
}
public void actionPerformed(ActionEvent e) {
// Beim Klick des Benutzers auf "Weiter"
if("weiter".equals(e.getActionCommand())) {
// Wenn die letzte Wav-Datei erreicht ist
if(_wav_files.size()-1 == _current_wav) {
int value = _slider.getValue();
// letzte Bewertung noch speichern, dann
_bewertung.addElement(value);
// Ende erreicht, mach nix mehr
_prom.startThanks();
// loese speichern aus
_prom.speichereErgebnis();
return;
}
// Wenn das Ende noch nicht erreicht ist...
_current_wav = _current_wav + 1;
// slider wert abfragen, in vector speichern
int value = _slider.getValue();
_bewertung.addElement(value);
// slider resetten
_slider.setValue(50);
// neue wav-datei laden(Dateiname aus array auslesen), satz aendern
playCurrentWav();
_satz.setText((String)_sentences.elementAt(_current_wav));
// Abfrage mit boolean
boolean exists = (new File("_wav_files.elementAt(_current_wav)")).exists();
if (exists) {
_satz.setText((String)_sentences.elementAt(_current_wav));
playCurrentWav();
} else {
_satz.setText((String)"sound file not found");
_wav_files.setElementAt(new String("sound file not found"),_current_wav);
}
}
// Klick des Benutzers auf den Button, auf dem der Satz steht
else if("play_again".equals(e.getActionCommand())) {
// wav-datei oeffnen und abspielen
playCurrentWav();
}
}
};
Experiment _exp;
StartWindow _start_window;
Thanks _thanks;
public Prominence(){
setSize(800,600);
_exp = new Experiment(this);
_start_window = new StartWindow(this);
_thanks = new Thanks(this);
add(_start_window);
}
public void showStartWindow()
{
_start_window.setVisible(true);
}
public void hideExperiment()
{
//_exp.setVisible(false);
}
public void startExperiment()
{
_start_window.setVisible(false);
add(_exp);
_exp.setVisible(true);
_exp.playCurrentWav();
}
// Der Schlussbildschirm wird nach der Bewertung der letzten Audiodatei aufgerufen
public void startThanks()
{
_exp.setVisible(false);
add(_thanks);
_thanks.setVisible(true);
}
// Im Vektor bewertung befinden sich alle Bewertungen der Audiodateien
public void speichereErgebnis() {
String datei = _start_window.holeDateiname();
Vector bewertung = _exp.holeBewertung();
Vector wav = _exp.holeWavDateien();
// BufferedWriter fuer die Datei oeffnen
// fuer jedes Element des Bewertungsvektors
for(int k=0; k < bewertung.size(); ++k) {
// schreibe index und bewertung in die datei
try {
BufferedWriter bw = new BufferedWriter (new FileWriter (datei, true));
// Ausgabeformat: Index-Dateiname der wav-Datei-Bewertung der wav-Datei (Zeilenumbruch)
bw.write(k + "-" + wav.elementAt(k) + "-" + bewertung.elementAt(k) + System.getProperty("line.separator"));
bw.close();
}
catch (IOException f) {
}
}
}
public void windowClosing(WindowEvent e) {
System.exit(0);
}
public void actionPerformed(ActionEvent e) {
System.out.println("Action start window");
_start_window.actionPerformed(e);
System.out.println("Action experiment window");
_exp.actionPerformed(e);
}
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("ProminenceDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Create and set up the content pane.
Prominence newContentPane = new Prominence();
//newContentPane.addActionListener(this);
newContentPane.setMinimumSize(new Dimension(800,600));
newContentPane.setMaximumSize(new Dimension(800,600));
newContentPane.setPreferredSize(new Dimension(800,600));
newContentPane.showStartWindow();
newContentPane.hideExperiment();
newContentPane.setOpaque(true); //content panes must be opaque
newContentPane.setBackground(Color.WHITE);
frame.setContentPane(newContentPane);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String argv[]) {
createAndShowGUI();
//ButtonEx1 be = new ButtonEx1();
}
}