# Vorgefertigte Klassen



## lucien (29. Nov 2014)

Hallo in der Schule ist BlueJ so eingestellt, dass  man mehr Klassen zur Auswahl hat. Dies sind dann normale Klasse, in denen der Code wie z.B. initFrame oder der Actionlistener schon geschrieben ist. Damit spart man sich Zeit und macht auch keine Fehler. Wie unser Lehrer nun mal ist hat er uns nicht gezeigt, wie man diese Klassen "anstellt" Wisst ihr es? Denn bei den Hausaufgaben habe ich aus einer dieser Klassen etwas Kopiert aber es funzt nicht. 
(Code) 

```
import java.util.Random;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Lotto
{ 
    int a,b,c,d,e,f;
    int g,h,i,j,k,l;
    TextField tf1, tf2, tf3, tf4, tf5, tf6;
    Label lb1,lb2,lb3,lb4,lb5,lb6,lb7,lb8,lb9,lb10;
    JButton bt1;
    public Lotto()
    {
     Random rand = new Random();
     a = (rand.nextInt(49))+1;
     b = (rand.nextInt(49))+1;
     c = (rand.nextInt(49))+1;
     d = (rand.nextInt(49))+1;
     e = (rand.nextInt(49))+1;
     f = (rand.nextInt(49))+1;
     initFrame();
    }
     public void initFrame() {
        setTitle("Lotto");
        setLayout(new BorderLayout());
        Panel Panel1=new Panel(new GridLayout(2,7));
        Panel.add(tf1);
    }
}
```

Er kennt die Befehle in intitFrame nicht. Wenn ich mir diese Klasse erstellen könnte wäre das Problem ja gelöst
Danke im Vorraus!
LG Lucien


----------



## javampir (30. Nov 2014)

hi,
ich kenne diese klassen nicht, ich kann nur vermutungen anstellen.
versuch mal in der ersten zeile der klassendefinition public class Lotto extends JFrame zu schreiben. dann müsstenst du in der sersten zeile des konstruktors super() aufrufen. in initFrame schreibst du:


```
public void initFrame() {
    setTitle("Lotto");
    setLayout(new BorderLayout());
    Panel panel1=new Panel(new GridLayout(2,7));
    panel1.add(tf1);
    add(panel1, "Center");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 400);
    setVisible(true);
}
```

mehr kann ich hier leider nicht erraten.
javampir


----------



## MK115 (30. Nov 2014)

lucien hat gesagt.:


> Denn bei den Hausaufgaben habe ich aus einer dieser Klassen etwas Kopiert aber es funzt nicht.



Gut wäre auch zu wissen was genau nicht funktioniert?!
Bekommst du ein Fehler geworfen?


----------



## javampir (30. Nov 2014)

lucien hat gesagt.:


> Er kennt die Befehle in intitFrame nicht.



hat er doch klipp und klar gesagt.


----------



## MK115 (30. Nov 2014)

hatte es falsch gelesen, mein Fehler


----------



## lucien (30. Nov 2014)

Ich hab den Fehler gefunden ich musste JPanel und ActionListener implementieren/exportieren, also am Anfagn schreiben:
public class Lotto extends JFrame implements ActionListener

Mich würde aber trotztdem interessieren, wo ich diese Klassen herbekomme.


----------



## lucien (30. Nov 2014)

Klappt doch nicht..
er sagt immer: class Lotto is not abstract....
Jetzt hab ich Lotto zur abstrakten Klasse gemacht und alles funktioniert bis jetzt. Aber bei einem anderem Programm hat es doch auch funktioniert.
Was also ist dabei falsch?


----------



## JavaMeister (30. Nov 2014)

code?


----------



## lucien (30. Nov 2014)

Das nicht funktionierende Lotto Programm: (Ich kann die Klasse nicht ausführen)

```
import java.util.Random;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public abstract class Lotto extends JFrame implements ActionListener
{ 
    int a,b,c,d,e,f;
    int g,h,i,j,k,l;
    TextField tf1, tf2, tf3, tf4, tf5, tf6;
    Label lb1,lb2,lb3,lb4,lb5,lb6,lb7,lb8,lb9,lb10;
    JButton bt1;
    public Lotto()
    {
     Random rand = new Random();
     a = (rand.nextInt(49))+1;
     b = (rand.nextInt(49))+1;
     c = (rand.nextInt(49))+1;
     d = (rand.nextInt(49))+1;
     e = (rand.nextInt(49))+1;
     f = (rand.nextInt(49))+1;
     initFrame();
    }
     public void initFrame() {
        setTitle("Lotto");
        setLayout(new BorderLayout());
        Panel Panel1=new Panel(new GridLayout(2,7));
        tf1=new TextField("");
        tf2=new TextField("");
        tf3=new TextField("");
        tf4=new TextField("");
        tf5=new TextField("");
        tf6=new TextField("");
        Panel1.add(tf1);
        Panel1.add(tf2);
        Panel1.add(tf3);
    }
}
```

Der funktionierende Rechner mit dem selben Grundansatz, was das panel angeht:

```
import java.util.Random;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Rechner extends JFrame implements ActionListener
{
    JButton bt1,bt2,bt3,bt4, bt5;
    double x,y,z;
    int a,b,c;
    Label lb1, lb2, lb3, lb4;
    TextField tf1, tf2;
    
    public static void main(String[] args) {
        new Rechner();
    }
    
    public Rechner() {
        initFrame();
    }
    
    public void initFrame() {
        setTitle("Rechner");
        setLayout(new BorderLayout());
        JPanel panel = new JPanel(new GridLayout(1,4));
        JPanel panel2 = new JPanel(new GridLayout(3,2));
        JPanel panel3 = new JPanel(new GridLayout(1,1));
        bt1 = new JButton("+");
        bt2 = new JButton("-");
        bt3 = new JButton("X");
        bt4 = new JButton(":");
        Font f = new Font("Arial",Font.PLAIN,16);
        bt1.setFont(f);bt2.setFont(f);
        bt1.addActionListener(this);
        bt2.addActionListener(this);
        bt3.setFont(f);bt4.setFont(f);
        bt3.addActionListener(this); 
        bt4.addActionListener(this);
        panel.add(bt1);
        panel.add(bt2);
        panel.add(bt3);
        panel.add(bt4);
        add("South",panel);
        lb1= new Label();
        lb2= new Label();
        lb3= new Label();
        lb4= new Label();
        tf1 = new TextField("");
        tf2 = new TextField("");
        lb1.setText("x=");
        lb2.setText("y=");
        lb3.setText("Ergebnis");
        lb4.setText("");
        panel2.add(lb1);
        panel2.add(tf1);
        panel2.add(lb2);
        panel2.add(tf2);
        panel2.add(lb3);
        panel2.add(lb4);
        add("Center",panel2);
        bt5=new JButton("Zufallsfarbe");
        panel3.add(bt5);
        add("North", panel3);
        panel.setSize(300,300);
        setSize(400,400);
        setVisible(true);
    }
 
     public void actionPerformed(ActionEvent e) {
     if (e.getSource()==bt1) {
       x=Double.parseDouble(tf1.getText());
       y=Double.parseDouble(tf2.getText());
       z=x+y;
       lb4.setText(""+z);
     }
     if (e.getSource()==bt2) {
         x=Double.parseDouble(tf1.getText());
       y=Double.parseDouble(tf2.getText());
       z=x-y;
       lb4.setText(""+z);
     }
      if (e.getSource()==bt3) {
         x=Double.parseDouble(tf1.getText());
       y=Double.parseDouble(tf2.getText());
       z=x*y;
       lb4.setText(""+z);
     }
     if (e.getSource()==bt4) {
         x=Double.parseDouble(tf1.getText());
       y=Double.parseDouble(tf2.getText());
       z=x/y;
       lb4.setText(""+z);
     }
     if (e.getSource()==bt5) {
         Random rand=new Random();
         a = rand.nextInt(255); 
         Random rand2=new Random();
         b = rand2.nextInt(255); 
          Random rand3=new Random();
         c = rand3.nextInt(255); 
         Color Hintergrund = new Color (a, b, c);  
     
    }
    
   
}
}
```


----------



## JavaMeister (30. Nov 2014)

Ich sehe....

Du musst Dir erstmal im klaren werden, was der Unterschied zwischen einer abstrakten Klasse und einer normalen ist.

(Hinweis: Von einer abstrakten  Klasse kann man keine Instanzen erstellen, weil diese i.d.R. Methoden enthalten, die nicht ausimplementiert sind.)

Dann muss man sich im Klaren sein, was das hier beduetet:

implements ActionListener

Was ist ActionListener?!

Siehe: ActionListener (Java Platform SE 6)

Was macht dieses Interface?


----------

