JCheckBoxen und deren Abfrage
-
Hallo,
Mir ist leider keine bessere Ueberschrift eingefallen, diese umschreibt mein Problem eigentlich auch nur, also ich versuche mal meine Problematik zu erklaeren:Man sollte die Klasse FilePresentation mit einem Vektor (ein Index von Optionen) instanziieren koennen...
FilePresentation fp = new FilePresentation(VectorMitOptionen);
...dann sollte man die Methode fuer das Fenster aufrufen koennen und dabei eben die Checkboxen anklicken koennen. Dabei sollte man dann die gewuenschten Optionen auswaehlen koennen:
Vector vec = fp.chooseFile();
...Die Inhalte der angeklickten CheckBoxen sollten dann in einen Vektor eingetragen werden (=indexOut). Dieser sollte dann eigentlich wieder zurueckgegeben werden an den jenigen, der die Funktion aufgerufen hat, was eben genau nicht funktioniert.
Hier ist der Code der Klasse die das Fenster, Checkboxen usw beinhaltet:
import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; public class FilePresentation extends JFrame implements ActionListener { private static Vector IndexIn, IndexOut; private JButton ok, cancel; private JCheckBox[] cb; private static int size; /////////////////////////////////////////////////// public FilePresentation(Vector in){ super("File Chooser v0.0"); System.out.println("presentation"); IndexIn = new Vector(0); IndexOut = new Vector(0); IndexIn = in; size = IndexIn.size(); } /////////////////////////////////////////////////// public void actionPerformed(ActionEvent arg0) { if(arg0.getSource() == cancel){ System.exit(0); }else if(arg0.getSource() == ok){ for(int cnt = 0; cnt < size; cnt++){ if(cb[cnt].isSelected() == true){ IndexOut.addElement( String.valueOf(IndexIn.get(cnt))); } } } } public Vector chooseFile(){ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().setLayout(new BorderLayout()); // JPanel for Checkboxes JPanel cbPanel = new JPanel(new GridLayout(0,1)); cb = new JCheckBox[size]; for(int cnt = 0; cnt < size; cnt++){ cb[cnt] = new JCheckBox((cnt + 1)+ ". " + String.valueOf(IndexIn.get(cnt))); cb[cnt].addActionListener(this); cbPanel.add(cb[cnt]); } JScrollPane scrollpane = new JScrollPane(cbPanel); getContentPane().add(scrollpane, BorderLayout.CENTER); // JPanel for OK and Cancel Button JPanel buttonPanel = new JPanel(new FlowLayout()); ok = new JButton("OK"); buttonPanel.add(ok); cancel = new JButton("Cancel"); buttonPanel.add(cancel); ok.addActionListener(this); cancel.addActionListener(this); // start the window getContentPane().add(buttonPanel, BorderLayout.SOUTH); setSize(300,300); show(); // wird nur immer leer zurueckgegeben return IndexOut; } }
-
Ähem warum addest du deine ganzen GUI-Komponenten in der public Vector chooseFile() ... is halt n bischen schlecht wenn der ActionListener erst beim aufruf geaddet wird ... deshalb bekommst du auch kein return bzw. nur die instanz von new Vector(0); Überschrieben wird ja erst in der action performed.
Alsopseudo private Vector vecOut = new Vector(); public FilePresentation(Vector vec) { //GUI button.addACtionListener(this); } public void actionPerformed(ActionEvent e) { //loop vecOut.addElement(); } public Vector chooseFile() { return vecOut; }