Hallo!
Ich habe mal eine kleine Frage - folgende Situation!
Eine For-Schleife wird x-mal durchlaufen. in der Schleife soll eine Fenster aufgemacht werden, werte gesetzt werden (über JSlider in diesem Fenster) und dieses Fenster wird durch OK bestätigt und geschlossen. Rückgabewert des Fensters ist ein Array welches im Aufrufenden Objekt in range gespeichert wird.
Die For Schleife siet folgend aus:
Jetzt soll die For-schleife aber jedesmal auf die OK Eingabe der RangeSliders warten und dann erst den nächsten RangeSlider öffnen. Wie kann man das anstellen?
Bis jetzt ist es so, das mir X Fenster (für jeden Schleifendurchlauf eines) "gleichzeitig" aufgemacht werden. Ich denke das ist womöglich mit Threads (wait() und notify()) machbar - nur habe ich bis jetzt nicht rausgefunden wie man das anstellt.
Kann mir da jemand helfen??
Danke schonmal!
PS: Der RangeSlider sieht wie folgt aus (falls das wichtig sein sollte) :
Ich habe mal eine kleine Frage - folgende Situation!
Eine For-Schleife wird x-mal durchlaufen. in der Schleife soll eine Fenster aufgemacht werden, werte gesetzt werden (über JSlider in diesem Fenster) und dieses Fenster wird durch OK bestätigt und geschlossen. Rückgabewert des Fensters ist ein Array welches im Aufrufenden Objekt in range gespeichert wird.
Die For Schleife siet folgend aus:
Code:
for (int j = 0; groups[j] != null; j++) {
rangeForGroups[j][0] = groups[j];
range = new RangeSlider("Set bounds for: " + groups[j]).viewRangeSlider();
// weiterer Code zur verarbeitung von range
}
Jetzt soll die For-schleife aber jedesmal auf die OK Eingabe der RangeSliders warten und dann erst den nächsten RangeSlider öffnen. Wie kann man das anstellen?
Bis jetzt ist es so, das mir X Fenster (für jeden Schleifendurchlauf eines) "gleichzeitig" aufgemacht werden. Ich denke das ist womöglich mit Threads (wait() und notify()) machbar - nur habe ich bis jetzt nicht rausgefunden wie man das anstellt.
Kann mir da jemand helfen??
Danke schonmal!
PS: Der RangeSlider sieht wie folgt aus (falls das wichtig sein sollte) :
Code:
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.text.NumberFormatter;
import view.listener.SliderChangeListener_max;
import view.listener.SliderChangeListener_min;
@SuppressWarnings("serial")
public class RangeSlider implements ActionListener {
private JFrame frame;
private int valueOfSlider_min, valueOfSlider_max;
private JSlider slider_min, slider_max;
private JFormattedTextField textField_min, textField_max;
private JLabel minLabel, maxLabel, titleLabel;
private int min = 0;
private int max = 100;
private JButton ok;
private String title;
private SliderChangeListener_min ch_li_min;
private SliderChangeListener_max ch_li_max;
private Font headLine = new Font("Verdana", Font.BOLD, 14);
public RangeSlider(String title) {
this.title = title;
}
public int[] viewRangeSlider() {
createSlider();
int[] returnValue = new int[2];
returnValue[0] = valueOfSlider_min;
returnValue[1] = valueOfSlider_max;
return returnValue;
}
private void createSlider() {
frame = new JFrame();
frame.setTitle("Please select range for:" + title);
frame.setLocation(600, 300);
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(8, 0, 7, 7));
titleLabel = new JLabel(" Please choose bounds for: " + title + " ");
titleLabel.setFont(headLine);
ch_li_min = new SliderChangeListener_min(this);
minLabel = new JLabel(" lower bound:");
slider_min = new JSlider(0, 100, 50);
slider_min.setPaintTicks(true);
slider_min.setMajorTickSpacing(10);
slider_min.setMinorTickSpacing(2);
slider_min.setPaintTrack(true);
slider_min.addChangeListener(ch_li_min);
ch_li_max = new SliderChangeListener_max(this);
maxLabel = new JLabel(" upper bound:");
slider_max = new JSlider(0, 100, 50);
slider_max.setPaintTicks(true);
slider_max.setMajorTickSpacing(10);
slider_max.setMinorTickSpacing(2);
slider_max.setPaintTrack(true);
slider_max.addChangeListener(ch_li_max);
java.text.NumberFormat numberFormat = java.text.NumberFormat.getIntegerInstance();
NumberFormatter formatter = new NumberFormatter(numberFormat);
formatter.setMinimum(new Integer(max));
formatter.setMaximum(new Integer(min));
textField_min = new JFormattedTextField(formatter);
textField_min.setValue(new Integer(50));
textField_min.setColumns(5);
textField_min.setEditable(false);
textField_min.setHorizontalAlignment(JTextField.CENTER);
textField_max = new JFormattedTextField(formatter);
textField_max.setValue(new Integer(50));
textField_max.setColumns(5);
textField_max.setEditable(false);
textField_max.setHorizontalAlignment(JTextField.CENTER);
ok = new JButton("OK");
ok.setActionCommand("ok");
ok.addActionListener(this);
frame.add(titleLabel);
frame.add(minLabel);
frame.add(slider_min);
frame.add(textField_min);
frame.add(maxLabel);
frame.add(slider_max);
frame.add(textField_max);
frame.add(ok);
frame.pack();
frame.setVisible(true);
}
public void actionPerformed(ActionEvent x) {
if (x.getActionCommand().equalsIgnoreCase("OK")) {
valueOfSlider_min = (Integer) textField_min.getValue();
valueOfSlider_max = (Integer) textField_max.getValue();
frame.dispose();
}
}
public void setTextField_max(int i) {
textField_max.setValue(i);
}
public void setTextField_min(int i) {
textField_min.setValue(i);
}
}