Swing Komponenten erscheinen beim darüberfahren?

mathiasj

Bekanntes Mitglied
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:
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:
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
 

Michael...

Top Contributor
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.
 

mathiasj

Bekanntes Mitglied
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
 

Michael...

Top Contributor
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.
 

mathiasj

Bekanntes Mitglied
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
 
C

Camino

Gast
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.
 

mathiasj

Bekanntes Mitglied
Okay, danke, jetzt verstehe ich (jedenfalls einigermaßen ;))

Jetzt habe ich auch die GUI richtig hingekriegt, danke!

LG,
mathiasj
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing Komponenten nicht sichtbar nach Start AWT, Swing, JavaFX & SWT 12
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
BabySuna Swing Komponenten auslagern auf separate Datei AWT, Swing, JavaFX & SWT 8
B Mit ContentPane werden Komponenten angezeigt, mit SplitPane, JPanel nicht? AWT, Swing, JavaFX & SWT 6
P AWT Einzelne Komponenten zur Laufzeit austauschen? AWT, Swing, JavaFX & SWT 3
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
F Gebundene Eigenschaften bei Komponenten mit NetBeans verarbeiten AWT, Swing, JavaFX & SWT 3
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
dereki2000 Swing JFrame nah hinzufügen von Komponenten akualisieren. AWT, Swing, JavaFX & SWT 2
L Swing Komponenten erst nach Resize sichtbar AWT, Swing, JavaFX & SWT 2
S Swing Panel übernimmt komponenten von anderem AWT, Swing, JavaFX & SWT 7
T Reihenfolge der Komponenten im einem JFrame AWT, Swing, JavaFX & SWT 8
P Gleichmäßige Anodnung von Komponenten im migLayout AWT, Swing, JavaFX & SWT 2
DaCrazyJavaExpert Swing Komponenten genauer anordnen. AWT, Swing, JavaFX & SWT 13
DaCrazyJavaExpert Swing Komponenten in GridBagLayout werden Falsch angeordnet AWT, Swing, JavaFX & SWT 1
P Größe und Ausrichtung von Komponenten festlegen AWT, Swing, JavaFX & SWT 13
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
Neumi5694 LookAndFeel Look & Feel nicht angezeigter Komponenten ändern AWT, Swing, JavaFX & SWT 6
D JavaFX GUI Komponenten werden langsam bei größerer Datenmenge AWT, Swing, JavaFX & SWT 6
R Komponenten von JPanel bleiben unsichtbar AWT, Swing, JavaFX & SWT 2
D JavaFX Welche Komponenten vermisst ihr? Welche wären essenziell notwendig? AWT, Swing, JavaFX & SWT 8
M Datei mit Komponenten einbinden AWT, Swing, JavaFX & SWT 7
T SWT Externer zugrif auf SWT Komponenten AWT, Swing, JavaFX & SWT 3
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
J MouseOver bei Komponenten AWT, Swing, JavaFX & SWT 9
S Größe der Komponenten, beim ändern der größe des Frames, mit ändern! AWT, Swing, JavaFX & SWT 2
D LayoutManager GUI skalieren und deren Komponenten mit Grid(Bag)Layout-Manager. AWT, Swing, JavaFX & SWT 5
G Komponenten vergrößern sich nicht trotz Layoutmanager AWT, Swing, JavaFX & SWT 24
M JavaFX Scenebuilder eigene Komponenten AWT, Swing, JavaFX & SWT 8
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
A JavaFX Eigene Komponenten im Scene Builder AWT, Swing, JavaFX & SWT 0
Q Swing Fenster updaten - Hinzugefügte Komponenten darstellen AWT, Swing, JavaFX & SWT 3
S BoxLayout: Anordnung der Komponenten links statt zentriert AWT, Swing, JavaFX & SWT 0
Bartertown JTable - Verschiedene Komponenten in einer Spalte unterbringen AWT, Swing, JavaFX & SWT 3
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
G Applet Applet Komponenten flackern AWT, Swing, JavaFX & SWT 10
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
M Komponenten übereinander AWT, Swing, JavaFX & SWT 7
R Komponenten werden erst nach maximierung des Frames sichtbar (Linux) AWT, Swing, JavaFX & SWT 5
H Swing Getter für GUI-Komponenten AWT, Swing, JavaFX & SWT 3
B Komponenten in Fenster verdrängen sich untereinander AWT, Swing, JavaFX & SWT 6
N Komponenten übereinander AWT, Swing, JavaFX & SWT 3
S Anordnung von GUI-Komponenten mit LayouManger (Problem beim anzeigen von JTextField) AWT, Swing, JavaFX & SWT 5
M Swing Komponenten enablen? AWT, Swing, JavaFX & SWT 4
X Java Komponenten jeder Zeit hinzufügen können AWT, Swing, JavaFX & SWT 3
S View-Komponenten im Controller bekannt machen AWT, Swing, JavaFX & SWT 7
D Grafische Komponenten komplett neu aufbauen (Neukonstruktion) AWT, Swing, JavaFX & SWT 5
A AWT Komponenten in JavaFX einbetten AWT, Swing, JavaFX & SWT 9
H Komponenten unmittelbar nach dem Ausführen teilweise unsichtbar AWT, Swing, JavaFX & SWT 3
K GUI in Komponenten aufteilen (MVC) AWT, Swing, JavaFX & SWT 2
W Funktionen, sowie aufruf einiger Komponenten AWT, Swing, JavaFX & SWT 4
J Alle Komponenten eines JFrames durchlaufen AWT, Swing, JavaFX & SWT 2
R Swing Komponenten bleiben bei Animation unsichtbar AWT, Swing, JavaFX & SWT 7
T Unter JPanel liegende Komponenten "totschalten" AWT, Swing, JavaFX & SWT 5
morphesus Swing Komponenten werden nicht angezeigt AWT, Swing, JavaFX & SWT 8
C Swing Reihenfolge der Initialisierung von Komponenten AWT, Swing, JavaFX & SWT 6
Asamandra LayoutManager GridBagLayout - Komponenten (mit fill?) vergrößern aber Proportionen dabei erhalten? AWT, Swing, JavaFX & SWT 3
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 7
B Swing Komponenten auf JApplet setSize AWT, Swing, JavaFX & SWT 2
W Bildgröße automatisch an Komponenten anpassen AWT, Swing, JavaFX & SWT 3
TheWhiteShadow Swing Komponenten organisieren AWT, Swing, JavaFX & SWT 9
S Überlappung zweier Komponenten AWT, Swing, JavaFX & SWT 12
Z größe der komponenten bestimmen AWT, Swing, JavaFX & SWT 16
C GUI-Komponenten skalieren AWT, Swing, JavaFX & SWT 10
M Seltsames Problem mit Resize eines Fensters und seiner Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Komponenten verstecken AWT, Swing, JavaFX & SWT 4
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
S Problem mit Swing Komponenten AWT, Swing, JavaFX & SWT 11
A Swing Alle Komponenten auf JFrame ermitteln AWT, Swing, JavaFX & SWT 4
E LookAndFeel Eigene Komponenten mit Synth L&F stylen AWT, Swing, JavaFX & SWT 2
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
S JButton und textfield.setText - Komponenten über-/verdecken sich AWT, Swing, JavaFX & SWT 15
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
M Komponenten in anderer Reihenfolge anzeigen AWT, Swing, JavaFX & SWT 4
G swing Komponenten verrutschen ständig... AWT, Swing, JavaFX & SWT 6
D Mit GridBayLayout Komponenten anordnen AWT, Swing, JavaFX & SWT 6
N Window transparent, Komponenten nicht transparent AWT, Swing, JavaFX & SWT 11
R Farbänderung von Komponenten wird nicht wirksam AWT, Swing, JavaFX & SWT 7
P Swing Hierachie oder Reihenfolge von Komponenten AWT, Swing, JavaFX & SWT 5
T Sich überlappende Komponenten AWT, Swing, JavaFX & SWT 2
D Swing Probleme beim Anzeigen der einzelnen Komponenten AWT, Swing, JavaFX & SWT 16
R Swing Komponenten klein angezeigt AWT, Swing, JavaFX & SWT 10
D Swing Swing Komponenten verschieben AWT, Swing, JavaFX & SWT 7
B Komponenten nach Skalierung nicht mehr ansprechbar AWT, Swing, JavaFX & SWT 9
Kr0e AWT Komponenten in JPanel AWT, Swing, JavaFX & SWT 6
JuliaOne Komponenten innerhalb eine JScrollpane werden auch ausserhalb davon gezeichnet! AWT, Swing, JavaFX & SWT 7
xehpuk Swing Komponenten werden durch setFont() winzig AWT, Swing, JavaFX & SWT 3
O Größe von Komponenten im JFrame manuell verändern AWT, Swing, JavaFX & SWT 2
H Komponenten anwendugsweit formatieren AWT, Swing, JavaFX & SWT 6
M Swing Komponenten mit fester Größe an Fensterrand(JFrame) AWT, Swing, JavaFX & SWT 2
A Komponenten zur Laufzeit entfernen AWT, Swing, JavaFX & SWT 3
Weiti Swing Animationen - Drehung aller Komponenten auf Knopfdruck AWT, Swing, JavaFX & SWT 12
P LayoutManager Komponenten einfügen (FlowLayout, BoxLayout) AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben