Moin Moin!
Ich erstelle einen JDialog über den man MC-Fragen erstellen kann. Dieser Dialog wird über mein MainFrame geöffnet und soll ein Question-Objekt zurück geben, wenn in dem Dialog auf "add" gedrückt wurde.
Das ganze soll analog wie in dem Beispiel des Java-Tutorials funktionieren:
Um mein Code zum Zeigen zu vereinfachen, habe ich das Question-Objekt durch eine ArrayList<String> ersetzt.
Derzeit schaut die Klasse QuestionDialog so aus:
Die Methode
in meiner MainFrame-Klasse schaut so aus:
Hat jemand einen Tipp wie ich das hinbekomme? Am besten so, dass ich das auch für andere Dialog verwenden könnte.
Ich erstelle einen JDialog über den man MC-Fragen erstellen kann. Dieser Dialog wird über mein MainFrame geöffnet und soll ein Question-Objekt zurück geben, wenn in dem Dialog auf "add" gedrückt wurde.
Das ganze soll analog wie in dem Beispiel des Java-Tutorials funktionieren:
Java:
String s = (String)JOptionPane.showInputDialog(
frame,
"Complete the sentence:\n"
+ "\"Green eggs and...\"",
"Customized Dialog",
JOptionPane.PLAIN_MESSAGE,
icon,
possibilities,
"ham");
Um mein Code zum Zeigen zu vereinfachen, habe ich das Question-Objekt durch eine ArrayList<String> ersetzt.
Derzeit schaut die Klasse QuestionDialog so aus:
Java:
public class QuestionDialog extends JDialog implements ActionListener {
JTextArea question_area;
ArrayList<JLabel> answer_label = new ArrayList<JLabel>();
ArrayList<JTextField> answer_field = new ArrayList<JTextField>();
public QuestionDialog(JFrame owner, String title, boolean modal) {
super(owner, title, modal);
// setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
initComponents();
pack();
setResizable(false);
setLocationRelativeTo(null);
}
private void initComponents() {
Container cp = getContentPane();
cp.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(3,3,3,3);
gbc.anchor = GridBagConstraints.FIRST_LINE_START;
JLabel question_label = new JLabel("Frage:");
gbc.gridy = 0;
gbc.gridx = 0;
cp.add(question_label, gbc);
question_area = new JTextArea(5, 20);
gbc.gridy = 0;
gbc.gridx = 1;
cp.add(question_area, gbc);
int n = 5; // Anzahl der Antwortmöglichkeiten
for(int i = 0; i < n; i++) {
JLabel label = new JLabel( "Antwort " + (i+1) + ":" );
gbc.gridy = i + 1;
gbc.gridx = 0;
cp.add(label, gbc);
JTextField field = new JTextField(20);
gbc.gridx = 1;
cp.add(field, gbc);
answer_label.add(label);
answer_field.add(field);
}
JButton buttonAdd = new JButton("add");
buttonAdd.addActionListener(this);
JPanel panel = new JPanel();
panel.add(buttonAdd);
gbc.gridy = n + 1;
gbc.gridx = 1;
cp.add(panel, gbc);
}
@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("add")) {
ArrayList<String> list = new ArrayList<String>(); // TODO: die ArrayList muss durch ein richtiges Fragen-Objekt ersetzt werden
list.add( question_area.getText() );
for(int i = 0; i < answer_field.size(); i++) {
list.add( answer_field.get(i).getText() );
}
System.out.println( list.toString() );
}
}
}
Die Methode
Code:
actionPerformed
Java:
@Override
public void actionPerformed(ActionEvent event) {
if (event.getActionCommand().equals("Neue Frage")) {
// aktuell
QuestionDialog dialog = new QuestionDialog(this, "Frage", true);
dialog.setVisible(true);
// Ziel
/*
Zum Beispiel irgendwie sowas:
ArrayList<String> list (ArrayList<String>) MyDialogLoad.showQuestionDialog(this, "Frage", true);
*/
} else if (event.getActionCommand().equals("Beenden")) {
System.exit(0);
}
}
Hat jemand einen Tipp wie ich das hinbekomme? Am besten so, dass ich das auch für andere Dialog verwenden könnte.