Hollo Leute,
bin grade dabei ein Programm zu schreiben und habe da ein Problem mit ArayyList<Typ>.
Das Problem ist dies: Ich will Fragen in die ArrayList schreiben weil mann nicht absehen kann wieviele fragen es werden kann ich kein normales Array nehmen weil mann dieses beim anlegen Initialisieren muss. Also habe ich ArrayList<> genommen. Ich schreibe also Frage Objekte in die ArrayList (ArrayList<Frage>). Ganz am anfang mache ich nur eine Instanzvariable ( private Frage frage = new Frage(); ). Die Klasse Frage hat mehrer Methoden zwei davon heise setFrageID und setFrageText. Ich setze also die FrageID und Text und schreibe dieses Objekt in die ArrayList<>. (frageListe.add(frage) ). wenn ich jetzt zum beispiel zwei fragen reingeschriben habe [[ frageID=0; frageText = "frage1" und frageID=1;frageText="frage2"]] und die liste in einer for schleife auslese( fragenListe.get(i)) und in ein JText Area einfüge bekomme ich als ergebnis frageID=1; frageText="frage2" und das steht in allen beiden frage Objekten. ich hätte es aber gerne so frageID=0;frageText="frage1" und frageID=1;frageText="frage2".
ich habe gesehn das ich das ungefähr so machen muss
private Frage frage1 = new Frage();
private Frage frage2 = new Frage();
und dann
fragenListe.add(frage1);
fragenListe.add(frage2);
dann würde es glaube ich das gewünschte ergebnis geben.
aber ich weis ja nicht wieviele fragen es gibt das hat der user zu entscheiden.
hier nochmal der Code der zwei Klassen..
falls ihr noch andere fehler seht wäre ich für rat und kritik dankbar.
dieKlasse FragenFormulierungsFrame:
Alles anzeigen
die Klasse Frage.java
Alles anzeigen
bin grade dabei ein Programm zu schreiben und habe da ein Problem mit ArayyList<Typ>.
Das Problem ist dies: Ich will Fragen in die ArrayList schreiben weil mann nicht absehen kann wieviele fragen es werden kann ich kein normales Array nehmen weil mann dieses beim anlegen Initialisieren muss. Also habe ich ArrayList<> genommen. Ich schreibe also Frage Objekte in die ArrayList (ArrayList<Frage>). Ganz am anfang mache ich nur eine Instanzvariable ( private Frage frage = new Frage(); ). Die Klasse Frage hat mehrer Methoden zwei davon heise setFrageID und setFrageText. Ich setze also die FrageID und Text und schreibe dieses Objekt in die ArrayList<>. (frageListe.add(frage) ). wenn ich jetzt zum beispiel zwei fragen reingeschriben habe [[ frageID=0; frageText = "frage1" und frageID=1;frageText="frage2"]] und die liste in einer for schleife auslese( fragenListe.get(i)) und in ein JText Area einfüge bekomme ich als ergebnis frageID=1; frageText="frage2" und das steht in allen beiden frage Objekten. ich hätte es aber gerne so frageID=0;frageText="frage1" und frageID=1;frageText="frage2".
ich habe gesehn das ich das ungefähr so machen muss
private Frage frage1 = new Frage();
private Frage frage2 = new Frage();
und dann
fragenListe.add(frage1);
fragenListe.add(frage2);
dann würde es glaube ich das gewünschte ergebnis geben.
aber ich weis ja nicht wieviele fragen es gibt das hat der user zu entscheiden.
hier nochmal der Code der zwei Klassen..
falls ihr noch andere fehler seht wäre ich für rat und kritik dankbar.
dieKlasse FragenFormulierungsFrame:
Quellcode
- import javax.swing.*;
- import javax.swing.border.EtchedBorder;
- import javax.swing.border.TitledBorder;
- import java.util.ArrayList;
- import java.awt.*;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.ObjectOutputStream;
- import java.sql.*;
- public class FragenFormulierungsFrame extends JInternalFrame{
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- private JTextArea txtAreaFrage = new JTextArea ();
- private JTextArea txtAreaAusgabe = new JTextArea ();
- private JScrollPane sPaneFragen = new JScrollPane ();
- private JScrollPane sPaneFragenAusgabe = new JScrollPane ();
- private JPanel btnPanel = new JPanel();
- private JPanel lblPanel = new JPanel();
- private JButton btnNext = new JButton("Nächste Frage");
- private JButton btnSave = new JButton("Alle speichern");
- private JButton btnCancel = new JButton("Abbrechen");
- private ArrayList<Frage> fragenListe = new ArrayList<Frage>();
- private JLabel lblFragen = new JLabel("Fragen im Speicher: ");
- private Frage frage = new Frage();
- private Integer fragenCount = new Integer(0);
- private FragenFormulierungsFrame parent = this;
- // Konstruktor des JInternalFrames
- public FragenFormulierungsFrame(){
- setTitle("Fragen erstellen");
- txtAreaAusgabe.setLineWrap(true);
- txtAreaAusgabe.setWrapStyleWord(true);
- txtAreaAusgabe.setBorder(new EtchedBorder(Color.BLUE,Color.CYAN));
- txtAreaAusgabe.setSize(150,150);
- sPaneFragenAusgabe.add(txtAreaAusgabe);
- sPaneFragenAusgabe.setViewportView(txtAreaFrage);
- //sPaneFragen.setSize(20,20);
- sPaneFragenAusgabe.setBorder(new TitledBorder(new EtchedBorder(Color.BLUE,Color.CYAN)));
- sPaneFragenAusgabe.setBackground(new Color(129,190,241));
- txtAreaFrage.setLineWrap(true);
- txtAreaFrage.setWrapStyleWord(true);
- txtAreaFrage.setBorder(new EtchedBorder(Color.BLUE,Color.CYAN));
- //txtAreaFrage.setSize(250,100);
- sPaneFragen.add(txtAreaFrage);
- sPaneFragen.setViewportView(txtAreaFrage);
- //sPaneFragen.setSize(20,20);
- sPaneFragen.setBorder(new TitledBorder(new EtchedBorder(Color.BLUE,Color.CYAN),"Erstellen Sie nacheinander Ihre Fragen"));
- sPaneFragen.setBackground(new Color(129,190,241));
- lblFragen.setLayout(new FlowLayout(0));
- lblFragen.setBorder(new TitledBorder(new EtchedBorder(Color.BLUE,Color.CYAN)));
- lblFragen.setBackground(new Color(129,190,241));
- btnPanel.setLayout(new FlowLayout(1));
- btnPanel.setBackground(new Color(129,190,241));
- btnPanel.setBorder(new EtchedBorder(Color.BLUE,Color.CYAN));
- btnPanel.add(btnNext);
- btnPanel.add(btnSave);
- btnPanel.add(btnCancel);
- lblPanel.add(lblFragen);
- Container C = getContentPane();
- C.add(sPaneFragenAusgabe,BorderLayout.CENTER);
- C.add(lblPanel,BorderLayout.NORTH);
- C.add(sPaneFragen,BorderLayout.EAST);
- C.add(btnPanel,BorderLayout.SOUTH);
- btnCancel.addActionListener(new MybtnCancelActionListener());
- btnNext.addActionListener(new MybtnNextActionListener());
- btnSave.addActionListener(new MybtnSaveActionListener());
- Dimension D = Toolkit.getDefaultToolkit().getScreenSize();
- setSize((D.width)/2,(D.height)/2);
- setResizable(true);
- Dimension DMinimum = new Dimension();
- DMinimum.setSize(360,290);
- setMinimumSize(DMinimum);
- setClosable(true);
- setMaximizable(true);
- setAutoscrolls(true);
- setLocation ( (D.width - getSize(). width)/2,(D.height - getSize().height)/2);
- setVisible (true);
- setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
- }
- //ende Konstruktor
- //der Text des Labels lblFragen wird hier neu gesetzt
- public void setLabelText (Integer fragenCount){
- //lblFragen.setSize(10,50);
- lblFragen.setText("Fragen im Speicher: "+ fragenCount);
- }
- //ende Methode
- //in dieser Methode werden die formulierten Fragen
- //in der ArrayList<Frage> zwischengespeichert
- public void addIntoFragenliste (Frage frage){
- fragenListe.add(frage);
- setFragenCount(fragenListe.size());
- }
- //ende Methode addIntoFragenliste
- //liefert das zwischengespeicherte ArrayList<Frage>
- public ArrayList<Frage> getFragneListe (){
- return fragenListe;
- }
- // ende der Methode getFragenListe
- //selbsterklärend
- public void setFragenCount(Integer fragenCount){
- this.fragenCount = fragenCount;
- }
- //ende der Methode setFragenCount
- public Integer getFragenCount(){
- return fragenCount;
- }
- //innere ActionListener Klasse des btnCancel Buttons
- public class MybtnCancelActionListener implements ActionListener {
- public void actionPerformed(ActionEvent arg0){
- if (arg0.getSource().equals(btnCancel))
- {
- dispose();
- //Dimension D = getSize();
- //JOptionPane.showMessageDialog(null,"Size hight:" + D.height+"Size width: "+D.width);
- }
- }
- }
- //ende innere Klasse
- //innere ActionListener Klasse des btnNext Buttons
- public class MybtnNextActionListener implements ActionListener {
- public void actionPerformed(ActionEvent arg0){
- if (arg0.getSource().equals(btnNext))
- {
- frage.setFrageText(txtAreaFrage.getText());
- frage.setFrageID(getFragenCount());
- // hier adde ich die Object der array list hinzu
- addIntoFragenliste(frage);
- //-------------------------------------------------
- // und hier Test ich es
- for (int i=0; i<=fragenListe.size()-1;i++){
- txtAreaAusgabe.append("---> ID: "+fragenListe.get(i).getFrageID()+" :-->Text :"+fragenListe.get(i).getFrageText());
- }
- // ----------------------------------------------------
- setLabelText(getFragenCount());
- txtAreaFrage.setText("");
- txtAreaFrage.requestFocus();
- }
- }
- }
- //ende innere Klasse
- public class MybtnSaveActionListener implements ActionListener{
- public void actionPerformed(ActionEvent arg0){
- // JFileChooser fileChooser = new JFileChooser();
- // fileChooser.showSaveDialog(parent);
- // String file = fileChooser.getSelectedFile().getName();
- try {
- FileOutputStream fos = new FileOutputStream("file.ser");
- ObjectOutputStream oos = new ObjectOutputStream(fos);
- for(int i=0;i<=fragenListe.size()-1;i++){
- oos.writeObject(fragenListe.get(i));
- txtAreaFrage.append(fragenListe.get(i).getFrageText());
- }
- oos.close();
- JOptionPane.showInternalMessageDialog(parent,"Erfolgreich Serialisiert");
- }
- catch (IndexOutOfBoundsException ex){
- ex.getCause();
- ex.printStackTrace();
- JOptionPane.showInternalMessageDialog(parent,"Serialisierung fehlgeschlagen!! Fehler: "+ex.getLocalizedMessage());
- }
- catch(Exception ex1){
- JOptionPane.showInternalMessageDialog(parent,"Serialisierung fehlgeschlagen!! Fehler2: "+ex1);
- }
- }
- }
- }
die Klasse Frage.java
Quellcode
- import java.io.*;
- public class Frage implements Serializable {
- /**
- *
- */
- //private static final long serialVersionUID = 1L;
- private Integer frageID = new Integer(0);
- private String frageText = new String("");
- private boolean antwort = false;
- public boolean isAntwort() {
- return antwort;
- }
- public void setAntwort(boolean antwort) {
- this.antwort = antwort;
- }
- public Integer getFrageID() {
- return frageID;
- }
- public void setFrageID(Integer frageID) {
- this.frageID = frageID;
- }
- public String getFrageText() {
- return frageText;
- }
- public void setFrageText(String frageText) {
- this.frageText = frageText;
- }
- }