
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.Arrays;

public class Tutorial_01b extends JFrame {

  JTextArea editor = new JTextArea();

  //Frame konstruieren
  public Tutorial_01b() {
    setSize(1000, 700);
    setTitle("1. Tutorial: 2. Aufgabe Artikel");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  // wenn close, dann
    setGUI();
  } // create


  void setGUI() {
    JButton bnBsp1 = new JButton("Aufgabe1");		// Schalter definieren
    JButton bnBsp2 = new JButton("Aufgabe2");		// Schalter definieren
    JButton bnEsc = new JButton("Abbrechen");		// Schalter definieren

      // Center
    editor.setFont( new Font("Arial", Font.BOLD,28));
    editor.setText("");
    getContentPane().add( new JScrollPane(editor), BorderLayout.CENTER);

      // South
    bnBsp1.setFont( new Font("Arial", Font.BOLD,28));
    bnBsp2.setFont( new Font("Arial", Font.BOLD,28));
    bnEsc.setFont( new Font("Arial", Font.BOLD,28));

    JPanel panelBn = new JPanel();
    panelBn.setLayout( new FlowLayout( FlowLayout.RIGHT) );
    panelBn.add(bnBsp1);
    panelBn.add(bnBsp2);
    panelBn.add(bnEsc) ;
    this.getContentPane().add(panelBn, BorderLayout.SOUTH);

    bnBsp1.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        bnBsp1_Click();
      }
    });
    bnBsp2.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        bnBsp2_Click();
      }
    });
    bnEsc.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(ActionEvent e) {
        bnEsc_Click();
      }
    });

  }  // setGUI



  void bnBsp1_Click() {
    editor.setText("" );  
    Artikel[] feld = new Artikel[10];
    feld[0] = new Artikel(6234, 12.55);
    feld[1] = new Artikel(3234, 112.55);
    feld[2] = new Artikel(1134, 15.55);
    feld[3] = new Artikel(5534, 52.55);
    feld[4] = new Artikel(7734, 32.55);
    feld[5] = new Artikel(4322, 112.55);
    feld[6] = new Artikel(6634, 812.55);
    feld[7] = new Artikel(3334, 62.55);
    feld[8] = new Artikel(8734, 92.55);
    feld[9] = new Artikel(1134, 14.55);
    
    Arrays.sort(feld);
    for (int i=0; i<10; i++) {
       editor.append("feld[: "+(i+1)+"] = "+feld[i]+"\n" );  // Editorinhalt löschen 
    }
  }  // bn_Bsp1

  void bnBsp2_Click() {
 editor.setText("" );  
    Artikel[] feld = new Artikel[10];
    feld[0] = new Artikel(6234, 12.55);
    feld[1] = new Artikel(3234, 112.55);
    feld[2] = new Artikel(1134, 15.55);
    feld[3] = new Artikel(5534, 52.55);
    feld[4] = new Artikel(7734, 32.55);
    feld[5] = new Artikel(4322, 112.55);
    feld[6] = new Artikel(6634, 812.55);
    feld[7] = new Artikel(3334, 62.55);
    feld[8] = new Artikel(8734, 92.55);
    feld[9] = new Artikel(1134, 14.55);
    
    Artikel[] feldserach = searchArtikel(feld, 5534, 7734);
    for (int i=0; i<feldserach.length; i++) {
       editor.append("feldserach[: "+(i+1)+"] = "+feldserach[i]+"\n" );  // Editorinhalt löschen 
    }  
    for (int i=0; i<10; i++) {
       feld[i].setArtikelnummer(i+1);
    }
    for (int i=0; i<feldserach.length; i++) {
       editor.append("feldserach[: "+(i+1)+"] = "+feldserach[i]+"\n" );  // Editorinhalt löschen 
    }  

  }  // bn_Bsp2

  private Artikel[] searchArtikel(Artikel[] feld, int artmin, int artmax) {
     Artikel[] suchfeld;
     int i, n;
     n=0;
     for (Artikel a : feld) {
       if (a.getArtikelnummer()>=artmin  && a.getArtikelnummer()<=artmax) {
         n++;
       }
     }
     suchfeld = new Artikel[n];
     i=0;
     for (Artikel a : feld) {
       if (a.getArtikelnummer()>=artmin  && a.getArtikelnummer()<=artmax) {
         suchfeld[i] = new Artikel(a);  // CopyKonstruktor statt Referenz
         i++;
       }
     }
    return suchfeld;
  }
  

  void bnEsc_Click() {
    this.dispose();
    System.exit(0);
  }

 
  public static void main(String[] args) {
    Tutorial_01b frame = new Tutorial_01b();
    frame.setVisible(true);
  }

}

class Artikel  implements Comparable<Artikel> {
  
  private int artikelnr=0;
  private double preis=0.0;

  public Artikel( int artikelnr,  double preis) {
    this.artikelnr = artikelnr;
    this.preis = preis;
  }

  public Artikel( Artikel a) {
    this.artikelnr = a.artikelnr;
    this.preis = a.preis;
  }

  public String toString() {
    return "Artikelnr: "+artikelnr+"    Preis: "+preis;
  }

  public int getArtikelnummer(){
    return artikelnr;
  }
  public void setArtikelnummer(int artikelnr){
    this.artikelnr = artikelnr;
  }

   public int compareTo(Artikel a) {
     int ret = Integer.compare(artikelnr, a.artikelnr);
     if (ret==0) {
        ret = Double.compare(preis, a.preis );
     }    
    return ret;
   }


}  // Artikel
