Innere Klasse : kein static?

Status
Nicht offen für weitere Antworten.

Spin

Top Contributor
Hallo , ich habe da mal eine Frage :

Java:
class MeinInternerRahmen extends JInternalFrame
    {
        // Zähler für neuen Rahmen und Offsets (damit die Rahmen nicht verdeckt werden)
        static int openFrameCount =0;
        static final int xOffset =30,yOffset =30;
        
        public MeinInternerRahmen()
        {
            
            super("Interner Rahmen Nr. " + (++ openFrameCount),
                    true, // Groesse änderbar
                    true,// schliessbar
                    true,// maximierbar
                    true);// ninmierbar
            setSize(300,300);
            setLocation(xOffset*openFrameCount,yOffset*openFrameCount);

Also ich möchte gerne die Anzahl meiner Fenster mit zählen lassen, doch sagt er mir Fehler: Ich darf mein openFrameCount nicht static machen.

Ich brauche den aber static um diese im Konstruktor zu bekommen. Kann mir da jemand helfen?
 
Zuletzt bearbeitet von einem Moderator:
warum eine statische Variable in inneren Klassen verboten ist, habe ich auch noch nicht so genau gehört,
dass ich es gemerkt hätte und dir jetzt erzählen könnte,

aber auf jeden Fall kannst du deine statischen Variablen doch auch in der äußeren Klasse definieren?
brauchst du überhaupt eine innere Klasse?
 
OK, danke .

Es funktionert, wenn ich es einfach statisch in der äußeren Deklariere.
Ich brauche eine innere Klasse , weil meine äußere Klassen von JFrame erbt.

Ich kann ja leider nicht von mehreren Klassen erben.

2 verschiedene Klassen hätten ja auch kein Sinn gemacht. Ich muss mit der einen von JFrame ableiten und mit der anderen von JInternalFrame (JDestkopPane).

Da ist mir nichts anderes übrig gebleiben als eine innere Klasse zu definieren. Ich finde es toll , dass es sowas gibt 🙂

Ich hätte mal noch so eine Frage :

Wenn ich eine Adapterklasse einfüge , bsp.: Action event. (Interface)

Ich hole mir das Interface und dann schreibe ich ja die Mtehode auf :

Bsp.: Einen Button, den Listener hinzufügen.

Java:
b1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{

}
});

Ich kann ja nun mit der Referenzvariablen e arbeiten. Bsp.: Object quelle = e.getSource(); usw.

Das : ActionEvent e

Kann mir dass nochmal jemand genau erkären, was ich da mache?

public void actionPerformed --> Das ist die Methode
public void actionPerformed(ActionEvent e)--> Methode gefüllt mit formalen Parameter

ActionEvent ist die Klasse und e eine Variable die von der Klasse ActionEvent, Methoden aufrufen kann.
Ich kann also alles aus der Klasse nutzen bzw. aus dem Interface.

Ein interface besteht ja aus Methoden und und aus Konstanten.
Wäre nett , wenn mir noch jemand kurz sagen könnte, ob ich richtig liege...danke
 
Zuletzt bearbeitet von einem Moderator:
stimmt sicherlich, wobei die Formulierung der Fragen doch bezweifeln lassen, dass alles mit Sinn verstanden wurde,

mit anonymen Klassen, GUIs und Listener sollte man Methoden und Parametern, Interface und Klassen aber besser nicht üben,
sondern in Hello World-Programmen in Kapitel 1 der Lehrbücher..
 
Du hast vielleicht recht. Ich sollte mir nochmal paar Sachen anschauen. Schade , dass du mir nicht kurz und knapp es sagen möchtest. Aber ich kann verstehen , dass ihr nicht Lehrbücher wieder geben möchtet.

Die kann man sich ja selbst reinziehen.
Mit euch gehts halt einfach immer bischen schneller. Grundgedanken habe ich verstanden.

Kein Problem mehr mit der Kapselung, mit Klassen oder Instanz variablen. Auch den Konstruktor verstanden. Die Vererbung ist für mich auch nicht mehr neu, doch fehlen mir manchmal so paar sachen.

Bsp.:


Java:
public Vector2D(double x,double y)
    {
        this.x=x;
        this.y=y;
        this.laenge = pythagoras(this.x, this.y);
    }
    // Translation (Bewegung)

    /*Addieren der Vektoren durch Methode plus(), die translate() aufruft.
      --> es handelt sich auch um eine Verschiebung
      --> neue Länge brechnen durch pythagoras()*/
    public void translate(Vector2D trans)
    {
        this.x += trans.getX(); // Vektor um den wir verschieben wollen (+)
        this.y += trans.getY(); 
    }


Das hatten wir im Kurs. Nun frage ich mich : Vector2D trans ?
Da macht es noch nicht klick. Nutze ich es einfach nur , um die Methoden von der Klasse Vector2D aufzurufen?
 
Zuletzt bearbeitet von einem Moderator:
die Methoden gehören zur Klasse, das kann man so sagen,
aber die Klasse kennt der Compiler, kennt diese Methode selber,
es ist ja gar die eigene Klasse, dafür bräuchte es keine Parameter,

viel entscheidener: trans ist ein Datenobjekt, enthält Werte, nämlich x und y,
ob x nun 1, 2, 3, 45, 66 oder 5634543 ist, kann weder die Klasse noch die Methode sagen,
diese Information enthält ein bestimmtes Objekt zur Laufzeit

natürlich braucht es Methoden um Werte abzufragen usw
 
Wie wäre es mit JAVA-Tags zum Formatieren des Quelltexts? Das nächste mal bitte selber machen!

Ebenius
 
Kann es sein, das das Konzept der objektorientierten Programmierung noch gar nicht verstanden wurde? Forumlierungen wie "ActionEvent ist die Klasse und e eine Variable die von der Klasse ActionEvent, Methoden aufrufen kann." liegen dies nahe. In Wirklichkeit ist es so: e ist selber ein Exemplar von Objekten der Klasse ActionEvent. Es kann also quasi seine "eigenen" Funktionen aufrufen, denn es ist selber ein ActionEvent-Objekt.

Ansonsten, bin ich blind, oder ist in der ursprünglichen Fragestellung gar keine innere Klasse zu erkennen? Mir kommt das alles ganz normal vor..
 
Sehe ich auch so. Ein "JInternalFrame" hat nichts mit internen Klassen zu tun.

Habe in einem aktuellen Projekt mal folgenden Code eingefügt:

Code:
public class CompanyFrame extends javax.swing.JInternalFrame {
    static int count;
    public CompanyFrame() {
        count++;
...
        jLabel1.setText(String.valueOf(count));
   }

jLabel1 ist im InternalFrame und zeigt immer die Nummer des InternalFrames an. Funktioniert wunderbar.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben