Swing Component in separate Klasse

rohamis

Mitglied
hallo an das forum..

habe eine super einfache swing applikation:

Java:
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;


public class MainClass extends JFrame
{
	/* ### the Main-Frame ### */
	JFrame cc;

	/* ### Panels Start ### */
	private JPanel mainPanel;
	private JPanel toolsPanel;
	/* ### Panels End ### */

	/* ### Buttons Start ### */
	private JButton toolbarConnect;
	private JButton toolbarOpen;
	/* ### Buttons End ### */

	/* ### Menus, ToolBars and Menu - ToolBars Components Start ### */
    private JToolBar toolbar;
	/* ### Menus and Menu Components Start ### */

	/* ############################ FUNCTION ############################ */
	/* ### Initialize the Layout-Objects ### */
	public void initialize()
	{
		cc = new JFrame("Java Application");
        cc.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e) {System.exit(0);}
		});

		mainPanel = new JPanel();
		toolsPanel = new JPanel();

		toolbarConnect = new JButton(new ImageIcon("toolbar/copy.gif"));
		toolbarOpen = new JButton(new ImageIcon("toolbar/open.gif"));

		toolbar = new JToolBar("still draggable");
		toolbar.setFloatable(false);
	}

	/* ############################ FUNCTION ############################ */
	/* ### Declaring the Layout-Objects ### */
	public void setLayoutObjects()
	{
		mainPanel.setLayout(new GridLayout(1,1));
		mainPanel.setBackground(new Color(0,0,0));
		toolsPanel.setBackground(new Color(165,165,165));
	}

	/* ############################ FUNCTION ############################ */
	/* ### Adding the Layout-Objects ### */
	public void addLayoutObjects()
	{
		toolbar.add(toolbarConnect);
		toolbar.add(toolbarOpen);

		toolsPanel.add(toolbar);

		mainPanel.add(toolsPanel);
	}

	/* ############################ FUNCTION ############################ */
	/* ### Constructor of the main Class ### */
	public MainClass()
	{
		initialize();
		setLayoutObjects();
		addLayoutObjects();
		cc.add(mainPanel);
		cc.setSize(200,100);
		cc.setLocation(500,300);
		cc.setVisible(true);
	}

	/* ############################ CLASS ############################ */
	/* ### ActionKlasse - EventHandler ### */
	class CActionListener implements ActionListener
	{
		/* ############################ FUNCTION ############################ */
		public void actionPerformed(ActionEvent ev)
		{
		}
	}

	/* ### Main Function - Call of the FrameObject ### */
	public static void main (String[] arguments)
	{
		new MainClass();
	}
}

habe jetzt folgende frage:
es werden in diesem code super viele andere komponenten dazukommen..
und bevor ich damit anfange wollte ich mal wissen:

könnte ich die JToolBar in eine andere Klasse definieren, zB. UIComponents, die natürlich in einem package mit der MainKlasse liegt?
weil wenn ja, dann möchte ich gerne alle Komponenten in eine andere Klasse schreiben, sodass ich mich mit der MainKlasse mit anderen dingen beschäftigen kann, und die komponenten in der anderen klasse jederzeit ändern kann falls ich das möchte später..

müsste ich nicht eingentlich ein der MainKlasse eine instanz der Klasse UIComponents haben, und in die UIComponents klasse einfach nur diese Objekte definiere?
wie kann ich diese dann ansprechen? Um sie halt in der MainKlasse im mainPanel zu addieren?

danke
 

MQue

Top Contributor
Du kannst ja z.B.: alle Komponenten ableiten und dann noch verhalten dazuimplementieren oder auch nicht und in einer Klasse steckst du alles zusammen uns startest die GUI in deiner Main. In deiner main steht im besten Fall also nur eine Zeile, die mit der GUI zu tun hat.
 

icarus2

Top Contributor
Ich mache es oft so, dass ich einzelne Code-Fragmente in Methoden auslagere (z.B. private void createToolbar() ) und dann diese Methoden vom Konstruktor aus aufrufe. Ist dann etwas übersichtlicher.

Bevor du jedoch noch viel hinzufügst. Du leitest deine Klasse ja von JFrame ab. Zusätzlich hast du aber auch noch eine Instanzvariable JFrame frame. Beides macht auf jeden Fall keinen Sinn. Wenn du kein zusätzliches Verhalten zum JFrame hinzufügen willst, dann nehme das extends JFrame raus. Dann alle Methodenaurfue, die das Objekt verändern mit cc.methodenName() aufrufen. Sonst hast du zwei Instanzen eines JFrame, was nicht wirklichv viel Sinn macht.

Du hast also zwei Möglichkeiten

Die erste und eigentlich beste Möglichkeit wenn du kein zusätzliches Verhalten hinzufügen möchtest:
[Java]
import javax.swing.JFrame;

public class NonDerivedJFrame {

private JFrame frame;

NonDerivedJFrame(){

frame = new JFrame("title");
frame.setSize(500, 500);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new NonDerivedJFrame();

}

}
[/code]

Oder so geht es auch durch ableiten:
[Java]
import javax.swing.JFrame;

public class DerivedJFrame extends JFrame {

DerivedJFrame(){

setSize(500, 500);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new DerivedJFrame();

}

}
[/Java]

Aber nicht so. Denn sonst hast du zwei Instanzen der Klasse JFrame, was keinen Sinn macht wenn du nur ein einzelnes Fenster möchtest:
[Java]
import javax.swing.JFrame;

public class WrongClass extends JFrame {

private JFrame frame;

WrongClass(){

frame = new JFrame("title");
frame.setSize(300, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setTitle("title_2");
this.setSize(500, 500);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new WrongClass();

}

}
[/Java]

Hoffe, dass du das so verstehst.
 

rohamis

Mitglied
jo super.. danke für die antworten erstmal..

also:

@icarus2
genau das habe ich auch überlegt, weil bevor ich diesen thread aufgemacht habe, habe ich erstmal ein frame in der MainKlasse gehabt, und dort drinn:
Java:
UIComponents toolbarObject = new UIComponents();
geschrieben, und dann in der Klasse UIComponents ein anderes frame gehabt, sonst könnte ich die add() methode nicht benutzen..
weil ausser der toolbar möchte ich ja auch buttons auf der toolbar haben, und die muss ich ja irgendwie der toolbar dazu addieren oder so..
das problem bis her ist/war: ich kann nicht das toolbarObject vom typ KlassenObjekt dem Panel in der MainKlasse addieren..
also denke ich auch es muss irgendwie so sein, dass in der UIComponents Klasse kein JFrame abgeleitet werden muss..
und das mit der ableitung von JFrame und gleichzeitig eine instanz von JFrame habe ich verstanden, ok es kammen keine 2 fenster raus aber du hast recht.. ich habe "extends JFrame" rausgelassen..

und ich mach auch immer so dass ich verschiedene sachen in methoden habe und dann das object damit verändere.. ist echt übersichtlicher..

aber: ich wollte statt methoden in der selben klasse, wollte ich in eine andere klasse haben.. also noch mehr übersichtlicher :)

deswegen:
@MQue
ganz genau so meinte ich es auch, nur ich weiss noch nicht so recht wie genau ich das machen soll..

vielleicht 1-2 zeilen code bitte? :oops: nur damit ich das konzept verstehe..
in der MainKlasse muss ich bestimmt dann ein object dieser klasse definieren..
wie kann ich es dann dem frame in der MainKlasse addieren? wie muss ca. die UIComponents Klasse aussehen?

danke :)
 

rohamis

Mitglied
habs gelöst habs gelöst habs gelöst :toll::toll::applaus::applaus::idea::idea::joke::cool::pfeif:

ich schreib mal bisschen ausführlich, vielleicht hilft es andere weiter ohne neuen thread auf zu machen :)
also, ich habe die Main Klasse, und die UIComponents Klasse..

in der MainKlasse definieren ich ein objekt
Java:
UIComponents toolbarObject = new UIComponents();

dann in der UIComponents Klasse habe ich (musste sein!) von JFrame abgeleitet, damit ich die methode add() benutzen kann

somit kann ich in der MainKlasse dem hauptpanel das toolbar von der anderen klasse addieren und fertig :)

hier der code beider klassen:

die MainKlasse:
Java:
import myPackage.*;

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


public class MainClass
{
	UIComponents toolbarObject;

	/* ### the Main-Frame ### */
	JFrame cc;

	/* ### Panels Start ### */
	private JPanel mainPanel;
	private JPanel toolsPanel;
	/* ### Panels End ### */

	/* ############################ FUNCTION ############################ */
	/* ### Initialize the Layout-Objects ### */
	public void initialize()
	{
		cc = new JFrame("Java Application");
        cc.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent e) {System.exit(0);}
		});

		toolbarObject = new UIComponents();
		mainPanel = new JPanel();
		toolsPanel = new JPanel();
	}

	/* ############################ FUNCTION ############################ */
	/* ### Declaring the Layout-Objects ### */
	public void setLayoutObjects()
	{
		mainPanel.setLayout(new GridLayout(1,1));
		mainPanel.setBackground(new Color(0,0,0));
		toolsPanel.setBackground(new Color(165,165,165));
	}

	/* ############################ FUNCTION ############################ */
	/* ### Adding the Layout-Objects ### */
	public void addLayoutObjects()
	{
		toolsPanel.add(toolbarObject.toolbar); // hier die toolbar von der anderen klasse dem hauptpanel addieren ;)
		mainPanel.add(toolsPanel);
	}

	/* ############################ FUNCTION ############################ */
	/* ### Constructor of the main Class ### */
	public MainClass()
	{
		initialize();
		setLayoutObjects();
		addLayoutObjects();
		cc.add(mainPanel);
		cc.setSize(200,100);
		cc.setLocation(500,300);
		cc.setVisible(true);
	}

	/* ############################ CLASS ############################ */
	/* ### ActionKlasse - EventHandler ### */
	class CActionListener implements ActionListener
	{
		/* ############################ FUNCTION ############################ */
		public void actionPerformed(ActionEvent ev) // hier kommen super viele sachen hin!
		{
		}
	}

	/* ### Main Function - Call of the FrameObject ### */
	public static void main (String[] arguments)
	{
		new MainClass();
	}
}

und im myPackage Ordner liegt die UIComponents.java datei:
Java:
package myPackage;

import javax.swing.*;
import javax.swing.event.*;

import java.awt.*;
import java.awt.event.*;


public class UIComponents extends JFrame
{
	private JToolBar toolbar;
	private JButton toolbarConnect;
	private JButton toolbarOpen;
	private JButton toolbarCut;

	void initialize()
	{
		toolbar = new JToolBar();
		toolbar.setFloatable(false);
		toolbarConnect = new JButton(new ImageIcon("toolbar/copy.gif"));
		toolbarOpen = new JButton(new ImageIcon("toolbar/open.gif"));
		toolbarCut = new JButton(new ImageIcon("toolbar/cut.gif"));
	}

	public void addObjects()
	{
		toolbar.add(toolbarConnect);
		toolbar.add(toolbarOpen);
		toolbar.add(toolbarCut);
	}

	public UIComponents()
	{
		initialize();
		addObjects();
	}
}


ich danke euch beiden für eure hilfe..
hat mir den start-kick-gedanke gegeben um es zu lösen :):toll::toll::toll::toll:

EDIT: und bei den icons für die Buttons, bitte aufpassen, da muss man den Pfad mit ausgangspunt der mainklasse eingeben, und nicht der 2.klasse.. sonst findet er die nicht! :)
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
D GPS Tracker Swing Java Basics - Anfänger-Themen 2
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
B Einstieg in swing GUI Java Basics - Anfänger-Themen 7
S Swing Eingabe Erzwingen Java Basics - Anfänger-Themen 3
S Swing JTable Java Basics - Anfänger-Themen 7
Z Input/Output Programm mit Swing umsetzen Java Basics - Anfänger-Themen 6
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
V Dropdown Button in einer GUI (Java Swing) Java Basics - Anfänger-Themen 12
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
E Swing FileWrite?? Java Basics - Anfänger-Themen 3
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
M Swing Klasse auch per Kommandozeile starten? Java Basics - Anfänger-Themen 2
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
V Swing Componenten werden auf Mac nicht angezeigt Java Basics - Anfänger-Themen 19
J Überfordert mit Swing Java Basics - Anfänger-Themen 5
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
K Bild als Hintergrund in einem Swing Fenster Java Basics - Anfänger-Themen 21
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
C Swing i.V.m. Threads Java Basics - Anfänger-Themen 2
J XML Viewer for Swing Java Basics - Anfänger-Themen 6
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Swing, Buttons Wert zuweisen Java Basics - Anfänger-Themen 3
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
J Java GUI in Swing und das MVC Paradigma Java Basics - Anfänger-Themen 3
M Swing Java Basics - Anfänger-Themen 7
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben