komponente über externe klasse zufügen

screamboy14

Mitglied
hey ich hab da mal eine frage ich hab eine klasse wo ich mein JFrame einfach über die Main aufrufe dann hab ich eine klasse mit dem frame selbst und nun würde ich gern eine bzw jeweils eine klasse machen in den ich jeweils eine bestimmte komponentenart (z.b. buttens) deklariere und in der 2 genannten frameklasse zu adde das erstellen ist kein problem jedoch funktioniert das adden nicht.
wie bekomme ich aus meiner klasse für die buttens den zugang auf die klasse frame

geht soetwas überhaupt in java über externe klassen oder muss ich die methoden generell in der frame klasse selber erstellen wollte es übersichtlicher und nicht so quelltext vollgestopft machen :)

hier einmal der code




Java:
import javax.swing.JButton;
import javax.swing.JFrame;



public class Buttons extends JFrame
{
	 static JButton btnNewButton;
	
	 static void DeclearButtens()
	{
			btnNewButton = new JButton("New button");
			btnNewButton.setBounds(88, 93, 89, 23);
			btnNewButton.setVisible(true);
			
	}
	
	 static void AddButton() 
	{
	   //die methode soll den button in der klasse Fenster auf das contentPane adden 
		
	}
	

}


Java:
import javax.swing.JFrame;

public class Fenster extends JFrame
{
	public Fenster() 
	{
		setDefaultCloseOperation(Fenster.EXIT_ON_CLOSE);
		getContentPane().setLayout(null);
		setSize(500, 300);
		setLocationRelativeTo(null);
		setResizable(false);
		
		Buttons.DeclearButtens();
		Buttons.AddButton();
		
		setVisible(true);
		
		
	}
	
}
 
Zuletzt bearbeitet:

MrClave

Bekanntes Mitglied
Wieso willst du jede Komponentenart auslagern ?
Das ergibt in den meisten Fällen keinen Sinn.
Wenn man von der GUI etwas auslagern will, dann sollten das ganze "Sub-Systeme" sein.
Beispielsweise eine Menubar oder Toolbars (wenn man denn so will). Dadurch hätte man eine spezielle Funktionalität ausgelagert und für mehr Klarheit gesorgt.
Ist zumindest meine Ansicht.

Zu deinem Problem:
  1. Wieso erbt die Klasse Buttons von JFrame ? (Klassennamen sind zudem immer singular, nie plural. Ausnahmen bestätigen die Regel)
  2. Wieso hast du deinen JButton als static deklariert ? Normalerweise sollte sowas nur private sein.
  3. Ebenso mit den Methoden. Gibt keinen ersichtlichen Grund, wieso hier static benutzt werden sollte.
  4. Deinen JButton kannst du nicht auf den Frame adden, weil du ihm nirgendswo sagst, WO er hinzugefügt werden soll.
  5. Methodennamen immer klein schreiben
  6. Von JFrame erben macht in 99% der Fällen keinen Sinn. Damit blockierst du nur weitere Vererbungsmöglichkeiten.

In deinem Code müsstest du die add-Methode so aussehen lassen:
Java:
static void AddButton( JFrame frame ) {
frame.add( btnNewButton );
}

In der Fenster Klasse dann:
Java:
    import javax.swing.JFrame;
     
    public class Fenster extends JFrame
    {
        public Fenster()
        {
            setDefaultCloseOperation(Fenster.EXIT_ON_CLOSE);
            getContentPane().setLayout(null);
            setSize(500, 300);
            setLocationRelativeTo(null);
            setResizable(false);
           
            Buttons.DeclearButtens();
            Buttons.AddButton(this); // <- HIER
           
            setVisible(true);
           
           
        }
       
    }
Die auslagerung ist hier allerdings vollkommen sinnlos und einfach nur overkill.
GUI Klassen neigen in Java dazu, sehr schnell, sehr lang zu werden. Ist soweit aber alles kein Problem.

Man sollte nie irgendwas aufteilen, nur weil es schön aussieht im Code. Wenn dahinter keine genauere Logik steckt, verwirrt es meist mehr, als das es hilft.

Mir scheint es aber so, dass du noch keinen Blick auf die Objekt Orientierte Programmierung geworfen hast ?!
Dies ist aber essenziell für fortgeschrittene Dinge, wie GUI usw.
Man sollte hier die ganzen Zusammenhänge verstehen.
 

Gucky

Top Contributor
Du kannst der erstellenden Klasse eine Instanz der zu verändernden Klasse mitgeben und darüber dann auf die add() Methoden der zu verändernden Klasse zugreifen.

EDIT: Solltest du nun immer noch deinen ursprünglichen Plan verfolgen wollen. :)
 
Zuletzt bearbeitet:

screamboy14

Mitglied
Zu deinem Problem:

Wieso erbt die Klasse Buttons von JFrame ? (Klassennamen sind zudem immer singular, nie plural. Ausnahmen bestätigen die Regel)
Wieso hast du deinen JButton als static deklariert ? Normalerweise sollte sowas nur private sein.
Ebenso mit den Methoden. Gibt keinen ersichtlichen Grund, wieso hier static benutzt werden sollte.
Deinen JButton kannst du nicht auf den Frame adden, weil du ihm nirgendswo sagst, WO er hinzugefügt werden soll.
Methodennamen immer klein schreiben
Von JFrame erben macht in 99% der Fällen keinen Sinn. Damit blockierst du nur weitere Vererbungsmöglichkeiten.

huhu danke erstmal für die schnelle antwort leider zeigt der editor den button immernochnicht in der vorschau an ....
zu deinen Fragen erstmal

1 das war experimentell obs dann villeicht klappt (einfach ins blaue versucht ...) danke für den tipp werd ich noch umändern :)

2 Static, weil wenn sie auf private sind kann ich die Methoden aus einer anderen Klasse heraus nicht aufrufen (sie wird auch nicht in dem aufklappfenster angezeigt...)

3 das adden an sich funktioniert ja (der button wird beim kompelieren auf dem laufendem frame angezeig) aber NICHT im gui editor die vorschau (auch anch deinem tipp leider nicht :(

4 ok mach ich ab jetzt danke :)

5 in welcher Klasse meinst du in der Buttons (da hab ich ja schon drauf geantwortet ) oder in der Fensterklasse (da muss ich das machen schon alleine damit der gui editor überhaupt angezeigt wird...)


auslagern möchte ich das der übersichtshalber, wie du schon geschrieben hast der QC wird sehr schnell SEHR lang und das wollte ich dadurch ein wenig verhindern
 

screamboy14

Mitglied
Du kannst der erstellenden Klasse eine Instanz der zu verändernden Klasse mitgeben und darüber dann auf die add() Methoden der zu verändernden Klasse zugreifen.

EDIT: Solltest du nun immer noch deinen ursprünglichen Plan verfolgen wollen. :)

Hey danke für den typ die möglichkeit ist mit glatt entfallen .... durch die instanz konnte ich nun das static schonmal weg lassen allerdings private setzen (wie MRClave meinte) geht dennoch nicht dann kommt die fehlermeldung das die Methode not visible is aber zumindest das static ist weg :)

leider wird immernoch nichts als vorschau im gui builder angezeigt :(
 
Zuletzt bearbeitet:

screamboy14

Mitglied
Welchen GUI Editor benutzt du denn? Manche Editoren zeigen nur die GUI aus derselben Klasse.

öhm wo steht das denn also wenn die klasse öffnen will geh ich immer auf open witz und dann auf window builder

das kann sein weil, wenn ich die methoden in der eigenen klasse habe dann wird es auf der gui builder angezeigt halt in der mitlerweile umbenannten Buttenklasse nicht .... (das ist ja eig das problem wesswegen ich den post gemacht hab :p)

welcher gui bilder zeigt die objekte denn auch außerhalb der eigenen klasse an ? und wie fühe ich den bei eclipse hinzu :)
 

Gucky

Top Contributor
Ich wüsste keinen. Das läuft, denke ich mal, unter "zu weit weg". Da müsstest du die Buttons schon in derselben Klasse hinzufügen. (Was auch den Regelfall darstellt. Versteh mich nicht falsch aber ich habe noch nie gehört, dass jemand das erstellen der GUI ausgelagert hat)
 
Zuletzt bearbeitet:

MrClave

Bekanntes Mitglied
Also mit private meinte ich lediglich deinen Button :p
Code:
static JButton btnNewButton;
zu
Code:
private JButton btnNewButton;

Die Methoden sollten schon noch public sein, damit du diese über eine Instanzvariable erreichen kannst.

Ich würde dir aber vorschlagen, das auslagern zu lassen.
Sobald eine Klasse über 500-1000 Zeilen Code enthält (halt je nachdem, was für eine Funktionalität eine Klasse hat), sollte man sich langsam gedanken über den Aufbau machen und gucken, ob man spezifische Probleme nicht auslagern könnte.

Mach dir am besten noch keine Gedanken über schönen Code. Es ist wichtiger, dass du erst mal verstehst, was du eigentlich machst. Der Rest kommt mit der Zeit von alleine.
Im späteren Verlauf kannst du dir dann Dinge wie GoF (Viererbande) und GRASP angucken, sofern ihr sowas (GRASP) hier kennt.

EDIT:
Wie ich gerade gelesen habe, verwendest du sogar einen WindowBuilder, was ich nicht verstehen kann!
Gerade am Anfang ist es wichtig, die paar Zeilen Code selbst zu schreiben, damit man ein Gefühl dafür bekommt.
 
Zuletzt bearbeitet:

screamboy14

Mitglied
Also mit private meinte ich lediglich deinen Button :p

EDIT:
Wie ich gerade gelesen habe, verwendest du sogar einen WindowBuilder, was ich nicht verstehen kann!
Gerade am Anfang ist es wichtig, die paar Zeilen Code selbst zu schreiben, damit man ein Gefühl dafür bekommt.

ich glaub ich hab meinen anfangspost falsch formuliert und falsch rüber gebracht was mein wunsch ist :oops:

ich will den auch nur zum verschieben der einzelnen objekte benutzen das coden mach ich ja selber halt nur das set bounds über den editor weils einfach schneller geht als immer koordinaten einzugeben zu kompelieren und zu gugen obs richtig aussieht ....
 

Gucky

Top Contributor
Und du willst jetzt das dein GUI Editor dir die Buttons anzeigt, die du in einer anderen Klasse gemacht hast. Tauchen die Buttons denn bei einem ganz normalen Start des Programms auf?
 

Gucky

Top Contributor
Dann ist dem WindowBuilder das wohl zu weit weg. Die GUI gehört aber eigentlich auch in die betreffende GUI Klasse. Und wird diese dadurch noch so lang. In der Regel wird sie einmal erstellt und danach nicht mehr angeguckt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Welche Komponente ist geeignet? Java Basics - Anfänger-Themen 1
P welche Komponente ist im Layout? Java Basics - Anfänger-Themen 2
S kleinster Index der größten Komponente ? Java Basics - Anfänger-Themen 3
I Grafische Benutzeroberflächen - welche Komponente nehme ich am besten? Java Basics - Anfänger-Themen 13
L GUI Problem - Komponente wird nicht positioniert, wie angegeben Java Basics - Anfänger-Themen 2
S Komponente sagen, sie soll etwas tun Java Basics - Anfänger-Themen 3
A Zugriff auf Komponente innerhalb einer JPanel Java Basics - Anfänger-Themen 8
H Höhe einer Komponente an Textinhalt anpassen Java Basics - Anfänger-Themen 4
F Zusammenhängend Komponente suchen(Graph) Java Basics - Anfänger-Themen 4
F Komponente nicht bereit? Java Basics - Anfänger-Themen 4
M zwei JApplets in einem Container + GUI-Komponente Java Basics - Anfänger-Themen 12
G Swing Komponente so groß wie Fenster Java Basics - Anfänger-Themen 10
G eigene Komponente einpflegen - bitt nicht auslachen Java Basics - Anfänger-Themen 4
T JMenuItems werden von Komponente in Panel verdeckt Java Basics - Anfänger-Themen 11
T repaint einer komponente Java Basics - Anfänger-Themen 2
J Swing Komponente soll Thread starten und abbrechen Java Basics - Anfänger-Themen 6
P Suche Namen für eine Komponente Java Basics - Anfänger-Themen 13
S Suche nach einer bestimmten Komponente . Java Basics - Anfänger-Themen 6
A Sichtbare Komponente und Focus Java Basics - Anfänger-Themen 2
D Komponente setvisible ja-nein Java Basics - Anfänger-Themen 4
G Welche Komponente von J2SE Java Basics - Anfänger-Themen 4
B KeyListener ohne Komponente. Java Basics - Anfänger-Themen 4
D Neuzeichnen eines Bildes in einer Komponente Java Basics - Anfänger-Themen 3
M nach Hinzufügen von Komponente neu zeichnen Java Basics - Anfänger-Themen 4
S Auslesen von Komponente aus Header Java Basics - Anfänger-Themen 2
J Wie drucke ich eine Komponente wie Kalender auf dem Drucker Java Basics - Anfänger-Themen 3
bernd Welche Komponente soll ich nehmen? Java Basics - Anfänger-Themen 2
richis-fragen GlassPane über JScrollPane legen Java Basics - Anfänger-Themen 6
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
P Neue Java v8 JRE Version nicht über alte drüber installierbar: Wie sonst? Java Basics - Anfänger-Themen 7
D Downloadfortschritt von Datei über Google Drive API v3 Java Basics - Anfänger-Themen 10
B großzügiges Pixelraster über Bildschirm legen Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
S Java über SSH Java Basics - Anfänger-Themen 13
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
D Best Practice Ausgabe über direkte Ausgabe oder try-catch? Java Basics - Anfänger-Themen 13
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
W char über die Konsole? Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal Hallo :) ich bekomme es nicht hin eine Fehlermeldung auszugeben über die GUI Java Basics - Anfänger-Themen 3
S Array über ein Ausgabemethode in main ausgeben Java Basics - Anfänger-Themen 31
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
A Array Ansprache einer Zelle über Punktnotation? Java Basics - Anfänger-Themen 3
O Java über cmd benutzen ? Java Basics - Anfänger-Themen 5
J Variablenzugriff über string Java Basics - Anfänger-Themen 18
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
M Java Kompilieren über Package grenzen hinaus Java Basics - Anfänger-Themen 4
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
Tino1993 Ellipse über draw Funktion ohne spur wandern lassen Java Basics - Anfänger-Themen 6
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
S While-Schleife geht in Endlosschleife über, warum? Java Basics - Anfänger-Themen 6
B OOP-Anfänge über CMD + Editor Java Basics - Anfänger-Themen 30
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Addition von Arrays über die Parameterliste Java Basics - Anfänger-Themen 11
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
1 Erste Schritte Was denkt ihr über eines meiner ersten Javaprogramme? Java Basics - Anfänger-Themen 2
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
J Button über Pfeiltasten bewegen Java Basics - Anfänger-Themen 8
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
T DoWhile Schleife über mehrere Mothoden Java Basics - Anfänger-Themen 5
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
J Gefilterten Stream über die Konsole ausgeben Java Basics - Anfänger-Themen 1
S Variablen Klassenvariable über Objekt aufrufen Java Basics - Anfänger-Themen 16
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
L Iterieren über eine CSV Datei Java Basics - Anfänger-Themen 7
I GUI über Eclipse oder NetBeans Java Basics - Anfänger-Themen 23
S Klassenaufruf über JFrame Button Java Basics - Anfänger-Themen 3
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
O Methode über Leerzeichen Java Basics - Anfänger-Themen 13
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
A Variablen Variablenwert über Konstruktor ändern Java Basics - Anfänger-Themen 3
J MySQL Datumsabfrage über ResultSet in Java-Servlet Java Basics - Anfänger-Themen 4
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
CptK Interface Bild über Methode ändern funktioniert nicht Java Basics - Anfänger-Themen 4
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
E Best Practice Jar-file mit zwei Klassen und externer Bibliothek über Konsole erzeugen Java Basics - Anfänger-Themen 13
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
G Arraynamen über eine Schleife ansprechen Java Basics - Anfänger-Themen 4
S Bild über JButton legen Java Basics - Anfänger-Themen 3
temi Druckeransteuerung über ESC-Sequenz Java Basics - Anfänger-Themen 21
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
B Könnte jemand über dieses jurze Javaprogramm schauen? Irgendwas funktioniert mit der z-Varible nicht Java Basics - Anfänger-Themen 2
M Java Programm über Batch-Datei ausführen Java Basics - Anfänger-Themen 1
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
C Erste Schritte Fehler beim *.class Aufruf über cmd.exe Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben