java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > AWT, Swing, JavaFX & SWT

AWT, Swing, JavaFX & SWT Themen zur Programmierung von Benutzer-Oberflächen (GUI, Applet) sowie zur Grafikprogrammierung (2D / 3D)

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 10.09.2012, 11:47   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 22.05.2012
Fachbeiträge: 110
Abgegebene Danke: 30
Erhielt 0 Danke für 0 Beiträge
Standard Komponenten erscheinen beim darüberfahren?

Hallo,
ich habe ein Vokabellernprogramm geschrieben, bei dem man seine Vokabeln selber erstellen muss. Am Anfang öffnet sich ein Fenster, wo man die Vokabeln abfragen lassen kann, doch man muss erst Vokabeln laden, die man erstellt hat. Um diese zu erstellen klickt man in der Menüleiste auf "Kartensatz erstellen".

Wenn ich auf Kartensatz erstellen klicke wird die Methode guiÄndern() aufgerufen. Dort wird mit removeAll() jedes Komponent vond dem JPanel entfernt, und es werden neue JTextFields usw. erstellt. Die Gui sieht dann genau gleich aus, aber ich muss es so machen, da ich ja neue Listener brauche(oder?). Das Problem ist nur, dass wenn ich auf Kartensatz erstellen klicke, dass dann das JFrame ohne JPanel erscheint! Doch wenn ich mit der Maus über das Frame rüberfahre erscheint plötzlich der JButton! Genauso, wenn ich mit der maus auf die Stelle klicke, wo die JTextFields sind! Das ist schon alles sehr komisch... Ich poste mal den Code von den beiden guiErstellen Methoden:

Java Code: Quelltext in neuem Fenster öffnen
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
public void guiErstellen() {
 
    frame.setSize(500,600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    mainPanel = new JPanel();
    
    Font bigFont = new Font("sanserif", Font.BOLD, 24);
    
    frage = new JTextArea(6,20);
    antwort = new JTextArea(6,20);
    
    JLabel fragel = new JLabel("Frage: ");
    JLabel antwortl = new JLabel("Antwort: ");
    
    prüfen = new JButton("Prüfen");
    prüfen.setEnabled(false);
    prüfen.addActionListener(new prüfenListener());
    
    nächsteKarteButton = new JButton("Nächste Karte");
    nächsteKarteButton.setEnabled(false);
    nächsteKarteButton.addActionListener(new nächsteKarteBListener());
    
    JMenuBar menüleiste = new JMenuBar();
    
    JMenu datei = new JMenu("Datei");
    JMenuItem laden = new JMenuItem("Kartensatz laden");
    JMenuItem erstellen = new JMenuItem("Kartensatz erstellen");
    
    laden.addActionListener(new ladenListener());
    erstellen.addActionListener(new erstellenListener());
    
    datei.add(laden);
    datei.add(erstellen);
    
    menüleiste.add(datei);
    
    frage.setEditable(false);
    frage.setLineWrap(true);
    antwort.setLineWrap(true);
    frage.setWrapStyleWord(true);
    antwort.setWrapStyleWord(true);
    frage.setFont(bigFont);
    antwort.setFont(bigFont);
    
    JScrollPane fscroller = new JScrollPane(frage);
    fscroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    fscroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    
    JScrollPane ascroller = new JScrollPane(antwort);
    ascroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    ascroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    
    mainPanel.add(fragel);
    mainPanel.add(fscroller);
    mainPanel.add(antwortl);
    mainPanel.add(ascroller);
    mainPanel.add(prüfen);
    mainPanel.add(nächsteKarteButton);
    
    frame.setJMenuBar(menüleiste);
    frame.add(BorderLayout.CENTER, mainPanel);
    frame.setVisible(true);

Hier die andere Methode:

Java Code: Quelltext in neuem Fenster öffnen
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
public void guiÄndern() {
    mainPanel.removeAll();
    frame.setSize(500,600);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    mainPanel = new JPanel();
    
    Font bigFont2 = new Font("sanserif", Font.BOLD, 24);
    
    frage2 = new JTextArea(6,20);
    antwort2 = new JTextArea(6,20);
    
    JLabel fragel2 = new JLabel("Frage: ");
    JLabel antwortl2 = new JLabel("Antwort: ");
    
    nächsteKarteButton2 = new JButton("Nächste Karte");
    nächsteKarteButton2.addActionListener(new nächsteKarteB2Listener());
    
    JMenuBar menüleiste2 = new JMenuBar();
    
    JMenu datei2 = new JMenu("Datei");
    JMenuItem neu = new JMenuItem("Neu");
    JMenuItem speichern = new JMenuItem("Kartensatz speichern");
    JMenuItem abfragen = new JMenuItem("Kartensatz laden und abfragen");
    
    neu.addActionListener(new neuListener());
    speichern.addActionListener(new speichernListener());
    abfragen.addActionListener(new abfragenListener());
    
    datei2.add(neu);
    datei2.add(speichern);
    datei2.add(abfragen);
    
    menüleiste2.add(datei2);
    
    frage2.setLineWrap(true);
    antwort2.setLineWrap(true);
    frage2.setWrapStyleWord(true);
    antwort2.setWrapStyleWord(true);
    frage2.setFont(bigFont2);
    antwort2.setFont(bigFont2);
    
    JScrollPane fscroller2 = new JScrollPane(frage2);
    fscroller2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    fscroller2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    
    JScrollPane ascroller2 = new JScrollPane(antwort2);
    ascroller2.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    ascroller2.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    
    mainPanel.add(fragel2);
    mainPanel.add(fscroller2);
    mainPanel.add(antwortl2);
    mainPanel.add(ascroller2);
    mainPanel.add(nächsteKarteButton2);
    
    frame.setJMenuBar(menüleiste2);
    frame.add(BorderLayout.CENTER, mainPanel);
    frame.setVisible(true);
    
  }



Wenn ihr wollt, poste ich noch den restlichen Code...

LG,
mathaisj
mathiasj ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 11:53   #2 (permalink)
Stammbenutzer
CD-R 80
 
Registriert seit: 17.02.2009
Fachbeiträge: 7.116
Abgegebene Danke: 7
Erhielt 1.105 Danke für 1.103 Beiträge
Zitat: mathiasj
Beitrag anzeigen
Wenn ich auf Kartensatz erstellen klicke wird die Methode guiÄndern() aufgerufen. Dort wird mit removeAll() jedes Komponent vond dem JPanel entfernt, und es werden neue JTextFields usw. erstellt. Die Gui sieht dann genau gleich aus, aber ich muss es so machen, da ich ja neue Listener brauche(oder?).
Eine GUI neu erstellen die genau gleich (im Sinne von gleiche Komponenten mit anderen Inhalten) aussieht ist nicht nur fraglich, sondern komplett Schmarrn. Es müssen einfach nur die Inhalte der Komponenten erneuert werden. Ein Lösungskonzept ist z.B. das MVC Pattern und artverwandte...

Blos weil Du beim Fernsehen auf ein anderes Programm wechselt, kaufst Du Dir ja auch nicht einen neuen Fernseher.
Michael... ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 12:03   #3 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 22.05.2012
Fachbeiträge: 110
Abgegebene Danke: 30
Erhielt 0 Danke für 0 Beiträge
Ich bin ziemlich neu in Java und weiß nicht was Pattern ist...

Also ich dachte mir halt ich brauche dasselbe Aussehen, aber ich brauche andere Listener... Deswegen muss ich eine neue JTextArea usw. erstellen, da eine einzige doch keine zwei Listener haben kann... Wie gesagt ich bin noch ziemlich neu in Java...

Wie würde das MVC Pattern denn in Code aussehen?

LG,
mathiasj
mathiasj ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 12:25   #4 (permalink)
Java-Forum Team
Site Operator
 
Benutzerbild von L-ectron-X
 
Registriert seit: 24.04.2004
Fachbeiträge: 11.995
Abgegebene Danke: 48
Erhielt 576 Danke für 535 Beiträge
Schau mal in die FAQ, da findest du ausreichend Beispiele.
__________________
Schöne Grüße,
L-ectron-X

Programmieren lernt man nur durch programmieren.

www.java-forum.org - Java programmieren aus Leidenschaft
www.byte-welt.de - Die Welt des Programmierens

"Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."
L-ectron-X ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 12:37   #5 (permalink)
Stammbenutzer
CD-R 80
 
Registriert seit: 17.02.2009
Fachbeiträge: 7.116
Abgegebene Danke: 7
Erhielt 1.105 Danke für 1.103 Beiträge
Ist vielleicht nicht unbedingt Anfängergeeignet, aber zur Info:
Model View Controller ? Wikipedia
Code Demo's gibt es hier, wenn nicht in den FAQs/Tutorials, einige in diversen Threads.

Grundsätzlich empfiehlt es sich auch, erst einmal klein anzufangen und Applikation Stück für Stück auf zubauen. Vom Einfachen zum Komplexen.
Warum muss sich denn das Menü ändern? Könnte man für den Anfang nicht einfach ein Menü anbieten, das alle Funktionen enthält?
Ansonsten Arrays, Listen usw. sind ein Begriff? Meiner Meinung ist es wichtig, dass man zunächst die grundlegenden Vorgehensweisen und Objekte kennt, bevor man sich mit einer GUI beschäftigt.
Michael... ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 12:53   #6 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 22.05.2012
Fachbeiträge: 110
Abgegebene Danke: 30
Erhielt 0 Danke für 0 Beiträge
Also MVC verstehe ich nicht so wirklich...

@Michael... Das Menü muss sich ändern, da ich einmal Code habe um die Vokabeln zu schreiben (mit entsprechenden Menüleisten wie speichern) und zum anderen Code habe um sie zu laden...

Und ja, ich kenne Arrays und Listen usw., aber ich weiß nciht wie mir das hier helffen soll?


Und weiß jemand von euch woran mein Problem überhaupt liegt? Ich verstehe das der Ansatz falsch ist, aber es interessiert mich einfach, warum der Code nicht funktioniert...


LG,
mathiasj
mathiasj ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.09.2012, 13:26   #7 (permalink)
Stammbenutzer
Megabyte
 
Benutzerbild von Camino
 
Registriert seit: 04.12.2007
Fachbeiträge: 1.538
Abgegebene Danke: 10
Erhielt 214 Danke für 214 Beiträge
Zitat: mathiasj
Beitrag anzeigen
Also MVC verstehe ich nicht so wirklich...
MVC heisst vereinfacht, dass du M wie Model (Daten), V wie View (GUI) und C wie Controller trennst, und wie diese dann miteinander kommunizieren bzw. agieren. Das bedeutet, in deiner View hast du nur die sichtbaren Komponenten und zeigst etwas an. Das Model enthält nur die Daten. Und der Controller steuert das Ganze. Dadurch wird alles übersichtlicher und beim Ändern oder Austauschen besser wartbar und weniger fehleranfällig. Das ist aber erst mal nur eine grobe Beschreibung. Wie das dann letztlich in der Realität umgesetzt wird, ist teilweise unterschiedlich.

Bei deinem Code ist es wahrscheinlich problematisch, dass du während der Laufzeit Komponenten von deiner GUI entfernst und wieder neu hinzufügst. Dabei kann es oft Fehler geben. Besser wäre, wenn du nur einmal eine GUI (z.B. Panel mit Formulakomponenten) erstellst und dann nur die Daten (aus dem Model) austauschst. Vor allem, wenn die GUI später genauso wieder aufgebaut werden soll, wie zuvor, sich also daran nichts ändert.
__________________
"Das Internet... Gibt's den Blödsinn immer noch?" (Homer Simpson)
Camino ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 11.09.2012, 13:50   #8 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 22.05.2012
Fachbeiträge: 110
Abgegebene Danke: 30
Erhielt 0 Danke für 0 Beiträge
Okay, danke, jetzt verstehe ich (jedenfalls einigermaßen )

Jetzt habe ich auch die GUI richtig hingekriegt, danke!

LG,
mathiasj
mathiasj ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
(Swing) Komponenten bleiben bei Animation unsichtbar renwal AWT, Swing, JavaFX & SWT 7 08.06.2012 15:25
(LayoutManager) GridBagLayout Komponenten austauschen Camino AWT, Swing, JavaFX & SWT 5 02.03.2010 15:58
Eigene Komponenten Seli AWT, Swing, JavaFX & SWT 2 21.02.2008 21:17
Laden und Speichern von Objekten (Autos / Filialen) forsakencries Java Basics - Anfänger-Themen 4 13.01.2008 16:23


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de