
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

import java.util.Vector;

//  Listener
import javax.swing.event.*; 

// JFrame mit zwei ComboBoxen
// Haupt und nebenBox
// zusätzlich mit Listenmodell, ComboBoxModel 

/*
Object getSelectedItem()
Object[] getSelectedObjects()
*/

public class ComboBox3 extends JFrame {

  JComboBox combo1;

  JComboBox combo2;

  Vector liste1;

  //Frame konstruieren
  public ComboBox3() {
    setSize(700, 350);
    setTitle("JComboBox3");
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    setGUI();
  }


 private void setGUI() {
    JButton bn1;
    JLabel label1, label2;
    JButton BnOk;
    JButton BnEsc;


    this.getContentPane().setLayout ( new GridBagLayout() );

    label1 = new JLabel("Fachbereiche");
    label1.setFont( new Font("Arial", Font.BOLD,32));

    liste1 = new Vector();

    liste1.add( "AI");
    liste1.add( "VW");
    liste1.add( "W");

    combo1 = new JComboBox(liste1);
    combo1.setFont( new Font("Arial", Font.BOLD,32));

    combo1.setSelectedIndex( 0 );

    this.getContentPane().add(label1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE,
            new Insets(10,10,10, 30), 0, 0));

    this.getContentPane().add(combo1, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(10,10,10,30), 0, 0));

    combo1.addActionListener(
       new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        combo1_click();
      }
    });


    label2 = new JLabel("Studiengänge");
    label2.setFont( new Font("Arial", Font.BOLD,32));

    // lokal !!!
    // NEU, geändert gegenüber ComboBox2
    myVector listenmodell2 = new myVector();

    listenmodell2.add( "IB");
    listenmodell2.add( "KI");
    listenmodell2.add( "ATI");
    listenmodell2.add( "IAS");
    combo2 = new JComboBox(listenmodell2);  // hier ComboBoxModel !!!
    combo2.setSelectedIndex( 0 );
    combo2.setFont( new Font("Arial", Font.BOLD,32));

    this.getContentPane().add(label2, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.NONE,
            new Insets(10,10,10,10), 0, 0));

    this.getContentPane().add(combo2, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0
            ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
            new Insets(10,10,10,10), 0, 0));



    //   Schalter unten

    JPanel panel = new JPanel();

    panel.setLayout( new FlowLayout() );

    BnOk = new JButton("Ok");  // Label erzeugen
    panel.add(BnOk);
    BnOk.setFont( new Font("Arial", Font.BOLD,32));


    BnOk.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnOk_click(e);
      }
    });

    BnEsc = new JButton("Esc");  // Label erzeugen
    panel.add(BnEsc);
    BnEsc.setFont( new Font("Arial", Font.BOLD,32));



    BnEsc.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        BnEsc_click(e);
      }
    });

    this.getContentPane().add(panel, new GridBagConstraints(0, 3, 2, 1, 1.0, 0.0
            ,GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
            new Insets(30,0,10,0), 0, 0));

  } // setGUI


  private void combo1_click() {
    int i = combo1.getSelectedIndex();
      // Wert selektiert,   dann  -1 !!
    if (i >= 0)  {
        // lokal !!!
       myVector listenmodell2 = new myVector();
       switch (i) {
         case 0:  // FB AI
                  listenmodell2.add( "IB");
                  listenmodell2.add( "KI");
                  listenmodell2.add( "AT");
                  listenmodell2.add( "IAS");
                  break;
         case 1:  // FB VW
                  listenmodell2.add( "Verwaltungsrecht");
                  listenmodell2.add( "Öffentliches Recht");
                  listenmodell2.add( "Verwaltungs-Informatik");
                  break;
         case 2:  // FB W
                  listenmodell2.add( "BWL");
                  listenmodell2.add( "VWL");
                  listenmodell2.add( "Marketing");
                  listenmodell2.add( "Tourismus");
                  break;
         default: throw new IllegalArgumentException("falscher case-fall");
       } // case

       // Hier nun wird das Modell neu gesetzt
       combo2.setModel( listenmodell2 );
       combo2.updateUI();
       combo2.setSelectedIndex( 0 );


    }
  }


  void BnOk_click(ActionEvent e) {
     String sRes;
     int i;

     i = combo1.getSelectedIndex();
     sRes = (String) combo1.getSelectedItem();

    System.out.println("Der "+Integer.toString(i)+" Eintrag wurde gewaehlt");
    System.out.println("Ergebnis: "+sRes);
     // rechte ComboBox
    i = combo2.getSelectedIndex();
    sRes = (String) combo2.getSelectedItem();
    System.out.println("Der "+Integer.toString(i)+" Eintrag wurde gewaehlt");
    System.out.println("Ergebnis: "+sRes);
    System.out.println("");
    System.out.println("");
    System.out.println("");
  }  // Bn Ok Click


  void BnEsc_click(ActionEvent e) {
      System.exit(0);
  }  // Bn ESC Click



  void cbBox1_actionPerformed(ActionEvent e) {
    System.out.println("Änderung in der Markierung der ComboBox");
  }


  public static void main(String[] args) {
    ComboBox3 frame = new ComboBox3();
    frame.setVisible(true);
  }



}





class myVector extends AbstractListModel 
                      implements  ComboBoxModel {
   private Vector liste;


   public myVector() {
     liste= new Vector();
   }

   public void clear() {
    liste.clear();
   }

   public void add(Object item) {
    liste.add(item);
   }


  private Object selectedItem;


  public Object getSelectedItem() {
    return selectedItem;
  }

  public void setSelectedItem(Object newValue) {
    selectedItem = newValue;
  }

  public int getSize() {
    return liste.size();
  }

  public Object getElementAt(int i) {
    return liste.elementAt(i);
  }

}
