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.
    Also

    pseudo
    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;
    }
    

Anmelden zum Antworten