ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
211
211
EMPFEHLEN
-
Hallo alle zusammen,
ich möchte mehrere JFrames erstellen deren Aussehen prinzipiell gleich ist. Alle besitzen eine TitelArea in der ein Icon sitzen soll und dazu noch ein wenig Text.
Nun wollte ich dafür eine Oberklasse bauen die mir einen JFrame erstellt der als grund gerüst dienen soll. Nun aber meine Frage. Wie kann ich den anderen JFrame Klassen klar machen das sie von der Oberklasse erben sollen. Bzw wie muss die Oberklasse aussehen. Mir fehlt wirklich jeder Ansatzpunkt.
danke schon mal für die Antworten ;o)
-
Das sollte dir vielleicht etwas helfen:
http://krum.rz.uni-mannheim.de/pk1-2002w/sess-39.html
Naja die Hauptklasse muss eben Methoden bereitstellen, die dir die gewünschten Objekte zurückliefert. Aus denen kannst du dann dein Grundgerüst bauen.Handlanger des Dr. Ex1tus
Ich kenne Matzes dunkles Geheimnis ! oO
o
L_/
OL
This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat.
Hallo Nuray!
-
Ach na klar...
danke für den Tipp. Ich weiß jetzt wie ich es mache. Meine Oberklasse erbt wie extends JFrame und stellt via Getter und Settermethoden alle wichtigen Eigenschaften zu Verfügung. Dann lasse ich meine einzelnen JFrames wieder via extends Oberklasse von der Oberklasse erbenen und stelle dann mit setMethode() die Parameter ein....
Also das Thema hätte sich damit auch geklärt..
Danke noch mal ;o)
-
06.05.09 15:09 #4
Also ich hätte es so gemacht:
Erstmal eine Art GrundFrame, wo schon alle gemeinsamen Elemente vorhanden sind. Das Fenster sollte also auch schon funktionsfähig sein, nur eben ohne Inhalt.
Dann würde ich davon nen neues Fenster ableiten und dort würden dann die fehlenden Inhalte reinkommen, und damit meine ich nicht unbedingt Text, sondern Elemente, die die anderen Frames eben nicht gemeinsam haben.
In meinem Beispiel habe ich als Grundlage eine Überschrift, eine Liste und eine Spielwiese eingefügt. In der Spielwiese können die "neuen" Frames sich austoben.
Hier die Codes:
Main.java
Code java:1 2 3 4 5 6 7 8 9 10
package main; public class Main { public static void main(String[] args) { TemplateFrame wnd = new TemplateFrame(); //TemplateFrame wnd = new FirstFrame(); //TemplateFrame wnd = new SecondFrame(); wnd.setVisible(true); } }
TemplateFrame.java
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
package main; import java.awt.*; import javax.swing.*; import javax.swing.border.*; import java.util.*; public class TemplateFrame extends JFrame { public final static long serialVersionUID = 1L; protected JLabel ueberschriftLabel = null; protected JList auswahlList = null; protected Vector<String> liste = null; protected JPanel mainPanel = null; public TemplateFrame() { super(); // Paar Einstellungen this.setLayout(null); this.setSize(500, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - this.getWidth()) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - this.getHeight()) / 2); initialize(); } private void initialize() { /* * Grundelemente einfügen */ Container cp = this.getContentPane(); // Ganz oben ein Label für die Überschrift ueberschriftLabel = new JLabel(); ueberschriftLabel.setLocation(0, 0); ueberschriftLabel.setSize(490, 35); ueberschriftLabel.setHorizontalAlignment(JLabel.CENTER); ueberschriftLabel.setText("Überschrift"); cp.add(ueberschriftLabel); // Auf der linken Seite noch eine Liste auswahlList = new JList(); auswahlList.setLocation(0, 40); auswahlList.setSize(150, 225); liste = new Vector<String>(); liste.add("Item1"); liste.add("Item2"); auswahlList.setListData(liste); auswahlList.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); cp.add(auswahlList); // Jetzt kommt die Hauptarbeits-Fläche mainPanel = new JPanel(); mainPanel.setLayout(null); mainPanel.setLocation(160, 40); mainPanel.setSize(325, 225); mainPanel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); cp.add(mainPanel); } }
FirstFrame.java
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
package main; import javax.swing.*; public class FirstFrame extends TemplateFrame { public final static long serialVersionUID = 1L; public FirstFrame() { super(); initialize(); } private void initialize() { // Überschrift setzen ueberschriftLabel.setText("Das ist FirstFrame"); // Ein Textfeld JTextField tf = new JTextField(); tf.setLocation(5, 5); tf.setSize(150, 25); mainPanel.add(tf); // Und noch nen Button JButton bt = new JButton("Ich bin ein Button"); bt.setLocation(5, 30); bt.setSize(150, 25); mainPanel.add(bt); } }
SecondFrame.java
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
package main; import java.awt.*; import javax.swing.*; public class SecondFrame extends TemplateFrame { public final static long serialVersionUID = 1L; public SecondFrame() { super(); initialize(); } private void initialize() { // Überschrift setzen ueberschriftLabel.setText("Das ist SecondFrame"); // Nen dummes Label JLabel lb = new JLabel("Hallo und so"); lb.setLocation(30, 30); lb.setSize(150, 25); lb.setOpaque(true); lb.setBackground(new Color(50, 150, 250)); mainPanel.add(lb); // Listeneinträge etwas ändern liste.clear(); liste.add("Oma"); liste.add("Opa"); liste.add("Mamma"); liste.add("Papa"); liste.add("Sohn"); liste.add("Tochter"); liste.add("Hund"); liste.add("Katze"); } }
Screens sind als Anhänge angefügt...Geändert von Akeshihiro (06.05.09 um 15:14 Uhr)
-
Eine Oberklasse ist nicht immer die beste Lösung. Du könntest dir auch einen Erzeuger schreiben, der die verschiedenen Frames parametergesteuert erstellt.
zB
public class FrameErzeuger_version1 {
public static JFrame gibFrame ( /*diverse parameter*/){
JFrame frame = new JFrame(){
/*
diverse Initialisierungen je nach den übergebenen
Parametern */
return frame;
}
oder wenn die Frames keine besonderen Parameter brauchen sondern Frames der gleichen Art auf die gleiche Weise erzeugt werden können und wenn nicht jede Art Frame die gleiche Art und Anzahl Parameter benötigt, dann kannst du den Aufruf auch etwas bequemer über einen enum-Parameter machen.
public class FrameErzeuger_version2 {
public enum frameType { FRAME_TYPE1, FRAME_TYPE2, FRAME_TYPE3
/* u.s.w. */ }
public static JFrame gibFrame ( frameType type ) {
JFrame frame ) = new Frame();
// Initialisierungen, die für alle Framearten
// gleich sind
switch (type) {
case FRAME_TYPE1 : iniFrameType1(frame); break;
case FRAME_TYPE2 : iniFrameType2(frame); break;
// u.s.w.
}
return frame;
}
private static void iniFrameType1( JFrame frame){
// initialisierungen
}
private static void iniFrameType2 ( JFrame frame) {
// initialisierungen
}
// u.s.w.
}
So vermeide ich, eine an sich schon mächtige Klasse wie Frame oder JFrame schon ist, noch weiter aufzublähen. Je tiefer abgeleitet wird, desto unhandlicher wird die Klasse. Ableitung ist deshalb nur in bestimmten Fällen die richtige Lösung.
Zu diesem Thema sollte man sich mal mit Entwurfsmustern oder Design Patterns beschäftigen.Geändert von hungbao (10.05.09 um 17:42 Uhr)
Ähnliche Themen
-
JFrames
Von schiese im Forum Java GrundlagenAntworten: 7Letzter Beitrag: 30.08.10, 10:39 -
SwingWorker mit JFrames
Von UnkiDunki im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 0Letzter Beitrag: 06.04.08, 23:30 -
Banner/Header für Webpage: Ferienhäuser Oberklasse bis Luxus
Von Layna im Forum Creative LoungeAntworten: 1Letzter Beitrag: 20.05.07, 21:26 -
JS und PHP das Gleiche macht nicht das Gleiche
Von Riebensiel im Forum Javascript & AjaxAntworten: 6Letzter Beitrag: 03.06.05, 07:13 -
gleiche Fenster: gleiche Veränderungen
Von zarrandreas im Forum .NET ArchivAntworten: 2Letzter Beitrag: 02.06.05, 18:48





Zitieren
Login





