Swing Vorgehen beim Aufruf der Klassen/Methoden

martin1989

Aktives Mitglied
Hallo!

Ich habe schlicht gesagt ein sehr "einfaches" Problem, dass mir aber leider ein wenig den Kopf zerbricht.

Ich habe eine Klasse Gui, in dem Konstruktor dieser Klasse baue ich mein GUI auf.
Dann habe ich in einem extra package eine Klasse CreateTable wo ich eine JTable erzeugen und befüllen will. Dann habe ich in diesem Package noch eine Klasse "model" dies ist TableModel für meine JTable.

Ich wollte fragen, ob mein Aufruf der JTable in dem Konstruktor von "gui" so richtig ist, und vor allem ob man das so macht?


Java:
        ...
        CreateTable table1 = new CreateTable(); 
        JTable table = table1.createTable(model);
         
         
         panelOne.add( new JScrollPane( table ), BorderLayout.CENTER );
....


Folgend ein vereinfachter Überblick der relevanten Klassen:


Java:
public class Gui {

	
    final Model model = new Model();
    JFrame frame = new JFrame("tool");
    PanelMain panelMain = new PanelMain();
    //USW
	
    public  Gui() {
        
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         
         panelMain.setLayout(cl);
     	
         panelOne.setName("1");
         panelOne.setLayout(bl);
         panelSecond.setName("2");
         //USW 

        
        CreateTable table1 = new CreateTable(); 
        JTable table = table1.createTable(model);
         
         
         panelOne.add( new JScrollPane( table ), BorderLayout.CENTER );
         
             	 
    	 frame.add(panelMain, BorderLayout.CENTER);
    	//USW

Java:
public class CreateTable extends JTable{
		

		
		public JTable createTable(Model model){
			

			// Das JTable initialisieren
			 JTable table = new JTable( model );

			 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			

	     
	        TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>();
	 
                      // MIT DATEN BEFÜLLEN USW 

			
	
			return table;

			
		}

Vielen Dank!
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Du benutzt eine sehr unsinnige Variante des FactoryPatterns. Deine Klasse CreateTable erweitert JTable, von dieser Erweiterung wird aber an keiner Stelle profitiert. Stattdessen gibt es eine Methode, die genauso heißt, wie die Klasse und sich um die Erzeugung der Table kümmert. Die Erweiterung kann weg. Allgemein solltest du nur Klassen erweitern, wenn du auch Funktionalitäten hinzufügst.
Klassen werden nicht nach ihrem Befehl benannt sondern nach ihrer Aufgabe. Deine Klasse müsste demzufolge TableFactory oder TableCreator heißen. (eher Ersteres)
Du solltest eine Variable auf alle Komponenten des GUIs halten.

Ansonsten sehe ich keine Mängel.
 

martin1989

Aktives Mitglied
Besten Dank für deine Antwort!

Habe die Erweiterung weggemacht.

Was meinst du mit

Du solltest eine Variable auf alle Komponenten des GUIs halten.

?

Ok, mir kam es nur irgendwie komisch vor, dass diese Methode in der Klasse "TableFactory" dann quasi einen return type hat.


Ähnliche Frage:

Ich habe eine Klasse gemacht "PanelLeftMenue", diese soll das Panel sein das links am rand angezeigt wird.
In dieser Klasse füge ich im Konstruktor einen Button auf dieses Panel hinzu.
Daher gibt es auch eine anonyme Klasse wo die methode "action performed" drinnen ist.
Nun will ich, wenn man auf diesen Button des PanelLeftMenue klickt, das auf dem Panel daneben (PanelMain), welches ein Cardlayout hat, ein anderes panel aufgerufen wird.


Ich habe es so gelöst:

Klasse PanelLeftMenue:

Java:
public class PanelLeftMenue extends JPanel{

	JButton buttonOne = new JButton("Open",createImageIcon("/resources/Open.gif"));
	

    public PanelLeftMenue(final PanelMain panelMain, final CardLayout cl) {


      	 this.add(buttonOne);
    	 buttonOne.setPreferredSize(new Dimension(100,25));	


     	 buttonOne.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0){
				 cl.show(panelMain, "3");
				
			  }
		});


Klasse GUI:

Java:
public class Gui {
	
....
    
    CardLayout cl = new CardLayout();
    PanelLeftMenue panelLeftMenue = new PanelLeftMenue(panelMain, cl);

macht man dies so?


also konkret bezieht sich meine frage auf das übergeben des "panelMain" bzw. "cl" und ob man dies so macht wenn man das panel quasi als externe klasse auslagert?


Plane das auch so für die anderen Panels zu machen.


VIelen Dank!
 

Gucky

Top Contributor
Da du keine Funktionalitäten hinzufügst, wäre entweder eine Factory oder einfach das direkte Benutzen des Panels sinnvoller.

Zu dem Bild für den Button: du solltest ImageIO nehmen. Wenn du das Programm fertig kompilierst, dann wird das so nicht funktionieren.
 

martin1989

Aktives Mitglied
was hast du den mit diesem satz in deinem ersten post gemeint?

"Du solltest eine Variable auf alle Komponenten des GUIs halten."



Naja ich füge dann dem Button schon noch einen FileOpener hinzu usw...
Wenn ich das alles in der GUI Klasse mache, wird sie halt sehr unübersichtlich finde ich ....


Was meinst du genau mit dem direkten benutzen des panels?

danke!
 

Gucky

Top Contributor
Das Panel erfüllt keine Aufgabe, außer ein Panel sein.
Zum Beispiel habe ich einmal ein kleines Programm zur Zeitmessung in Verbindung mit Events geschrieben. Man konnte eingeben, nach wie vielen Millisekunden ein Event ausgelöst werden sollte und wenn es ausgelöst wurde, wird es in einer JList angezeigt. In diese JList habe ich bestimmte Objekte eingefügt. Da die Standard add-Methode aber alle Components akzeptiert, anstatt nur meiner, habe ich sie überschrieben. Das ist ein Grund eine Klasse zu erweitern.
Auslagern kannst du aber für deine Zwecke wäre eine Factory sinnvoller.

Was macht der FileOpener im GUI? Dafür solltest du eine Handler Klasse erstellen. Das GUI ist ausschließlich dazu da, um Dinge anzuzeigen.


Mit dem Satz meine ich, dass du nicht
Java:
panel.add(new Component());
schreiben solltest, sondern
Java:
class Exempel{
  private Component comp;

...

  public Exempel(){
    this.comp = new Component();
  }
...
  private void init(){
    this.add(comp);
  }
}

Das sieht auf den ersten Blick nach viel mehr Arbeit aus aber es kostet (fast) keinen Speicher (je nach JRE 32 oder 64 Bit) und es kann dir viel Ärger und Mühen ersparen, falls du doch noch einmal auf die Komponente zugreifen willst. In der Regel ist das der Fall.
 

martin1989

Aktives Mitglied
Der FileOpener ist auch in der Klasse JPanelLeftMenue deklariert:

Java:
public class PanelLeftMenue extends JPanel{

	JButton buttonOne = new JButton("Open",createImageIcon("/resources/Open.gif"));
	

    
    public PanelLeftMenue(final PanelMain panelMain, final CardLayout cl) {


      	 this.add(buttonOne);
    	 buttonOne.setPreferredSize(new Dimension(100,25));	

    	 
     	 buttonOne.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent arg0){
				 cl.show(panelMain, "3");
				 System.out.println("ZZ");
				 

			        JFileChooser chooser = new JFileChooser();
			      		  
			        chooser.setDialogType(JFileChooser.OPEN_DIALOG);
			        
			        JFrame meinJFrame = new JFrame("Dateiauswahl");
			     
			        meinJFrame.setSize(450,300);
			        
			        meinJFrame.getContentPane().add(chooser);
			       
			        meinJFrame.setVisible(true);
				 
				 
				 
				 
			  }
		});

Bei deinem geposteten Code ist mir nicht ganz klar, woher die "add" methode sein soll, habs mal so getestet:

Java:
public class Test {

	private JButton button;

	
	public Test(){
		
		this.button = new JButton();
	
		
	}
	
	
	public void init(){
		
		
		 this.add(button); // ERROR add unbekannt 
		
	}
	
	
	public static void main(String[] args) {
		
	Test test = new Test();
        test.init();
		
		
	}
	
	
	
	
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Q LayoutManager Wie vorgehen? AWT, Swing, JavaFX & SWT 11
R Wie Vorgehen bei fundamentaler Veränderung des Layouts während des Programmablaufs? AWT, Swing, JavaFX & SWT 19
K Wasserzeichen wie vorgehen? AWT, Swing, JavaFX & SWT 6
A grundsätzliches Vorgehen für GUI Programmierung AWT, Swing, JavaFX & SWT 6
S Richtiges Vorgehen bei GUI-Programmierung AWT, Swing, JavaFX & SWT 7
MartinNeuerlich Kann mir jemand, der einen Mac mit einem m1 oder m2-Chip hat, eine POM geben mit der Javafx-Fullscreen beim Mac mit m-Chip funktioniert? AWT, Swing, JavaFX & SWT 1
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
B Output GUI funktioniert nur beim ersten Mal richtig. AWT, Swing, JavaFX & SWT 4
A JavaFX exportierte Jar ohne beim starten die Libs hinzufügen? AWT, Swing, JavaFX & SWT 2
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
G Gui updated beim zweiten Aufruf nicht mehr AWT, Swing, JavaFX & SWT 15
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
W Nullpointer Exception beim übertragen von Daten von Scene zu Scene AWT, Swing, JavaFX & SWT 6
missy72 JavaFX Wiederholen einer IF-Abfrage beim erneuten Öffnen einer Stage AWT, Swing, JavaFX & SWT 11
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
R NullPointerException beim Start des Fensters AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Kann mir jemand beim MediaPlayer helfen ? AWT, Swing, JavaFX & SWT 2
S JavaFx Zufallsfarbe beim Button-Klick AWT, Swing, JavaFX & SWT 22
L Swing JDialog ton beim klicken ausstellen AWT, Swing, JavaFX & SWT 1
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
ruutaiokwu Swing windowStateChanged macht exakt das Gegenteil beim Verändern der Fenstergrösse AWT, Swing, JavaFX & SWT 3
J Exception beim JFrame erstellen AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
D JInternalFrame wechselt Position beim ersten Click AWT, Swing, JavaFX & SWT 0
steven789hjk543 Swing Verstehe etwas beim GUI nicht AWT, Swing, JavaFX & SWT 3
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
J Hilfe beim tablevies AWT, Swing, JavaFX & SWT 2
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
T LookAndFeel LookAndFeel funktioniert nicht beim JFrame wechsel AWT, Swing, JavaFX & SWT 3
L Java FX Exception beim start AWT, Swing, JavaFX & SWT 2
L JSplitPane Divider Location beim Maximieren AWT, Swing, JavaFX & SWT 6
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J ObservableList wirft exception beim zweiten füllen. AWT, Swing, JavaFX & SWT 4
emma_louisa JavaFX Werte beim Aufrufen des Fensters übernehmen (SceneBuilder) AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
W Swing Hilfe beim Einbinden von Bildern in einem JFrame AWT, Swing, JavaFX & SWT 8
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
N Eclipse - GUI - MacBook - Buttonsichtbarkeit beim Anlegen/Erstellen AWT, Swing, JavaFX & SWT 14
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
E Swing Miserable Performance beim Ändern der Hintergrundfarbe von JLabels AWT, Swing, JavaFX & SWT 3
L Charset beim Drucken falsch AWT, Swing, JavaFX & SWT 2
MaxG. Swing Farbe von Button beim drücken ändern AWT, Swing, JavaFX & SWT 4
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
R Swing Programm läuft nur beim Debuggen korrekt ab AWT, Swing, JavaFX & SWT 4
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
W Kodierung (CharSet) beim Schreiben ändern AWT, Swing, JavaFX & SWT 1
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
P Scrollbalken verschwinden beim Zoomen AWT, Swing, JavaFX & SWT 4
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
D JavaFX (WebStart) Graues Fenster beim Start AWT, Swing, JavaFX & SWT 4
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
R Hilfe beim ändern des Hintergrundes eines JFrames AWT, Swing, JavaFX & SWT 9
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
I JavaFX Speichern der eingefügten Einträge beim Neustart des Programms AWT, Swing, JavaFX & SWT 2
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
C Gesucht: Hilfe beim programmieren. AWT, Swing, JavaFX & SWT 1
S Action durchführen beim Programm beenden AWT, Swing, JavaFX & SWT 3
J JavaFX Tooltip Verzögerung beim ersten Anzeigen AWT, Swing, JavaFX & SWT 4
C Hilfe beim programmieren mit studiumgebundenes Projekt AWT, Swing, JavaFX & SWT 1
A JavaFX Hilfe beim Design eines Quiz AWT, Swing, JavaFX & SWT 2
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
D JavaFX build.fxbuild error beim Erstellen einer exe AWT, Swing, JavaFX & SWT 2
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
T Swing NullPointerException beim auslesen von jTextField - Anfänger! AWT, Swing, JavaFX & SWT 3
R Swing Elemente verschieben sich im GBL beim Ein/Ausblenden AWT, Swing, JavaFX & SWT 0
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
F Breite beim GridBagLayout festlegen AWT, Swing, JavaFX & SWT 2
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
R TriangleMesh verschwindet teilweise beim resizen des Frames, sowie beim rotieren? AWT, Swing, JavaFX & SWT 1
S Swing Warum funktioniert der automatische Zeilenumbruch mit arabischen Zeichen beim JTextPane nicht AWT, Swing, JavaFX & SWT 3
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben