JComboBox klappt nur ein- bis zweimal auf

Status
Nicht offen für weitere Antworten.

The-Forgotten

Bekanntes Mitglied
Ich habe eine JComboBox mit 3 Einträgen einem JPanel mit GridBagLayout hinzugefügt.
Durch manche Prozesse wird die aktuelle Auswahl der Elemente, aus der JComboBox, vorgeschrieben mit der ".setSelectedItem();" Methode.

Nachdem das Item nun genau 1 - 2 mal mit der "setSelectedItem();" Methode ausgewählt wurde, klappt sich das Menü nicht mehr auf.

Es ist jedoch weiterhin möglich, die gewählten Items über anklicken des Feldes + Tastatureingabe(Pfeile) zu wechseln.
 
Soweit ich weiss ist es automatisch möglich mit den Pfeiltasten durch eine JComboBox zu kommen. Einfach die ComboBox anklicken, so dass sie aufgeht und anschliessend mit den Pfeiltasten nach oben oder unten.

Aber eigentlich sollte es trotzdem noch geöffnet werden auch beim anklicken. Gibt es irgend ne Exception oder werden die anderen Elemente entfernt oder so?

*Edit:

Eventuell hiflt ein bisschen Code weiter.
 
Den ganzen Code kann ich leider nicht posten, aber ich versuch mal die Teile rauszusuchen, die die Box betreffen.

Fehlermeldung wird keine erzeugt.

Zu Anfang funktioniert die Box auch richtig, alle Elemente erscheinen und sind auswählbar.

Java:
	  JComboBox cb_state=new JComboBox();

	  cb_state.addItem("Vor Ort");
	  cb_state.addItem("Verliehen");
	  cb_state.addItem("Andere");

	  panel_area_right_ne.add(cb_state);

         cb_state.getSelectedItem();
         cb_state.setSelectedItem("Vor Ort");
 
Hmm, ich habe bei einer Swing Applikation auch mal sowas machen müssen. Hier im Forum wurde mir anschliessend gesagt man solle die Methode so aufrufen:

[Java]
cb_state.getModel().setSelectedItem("Vor Ort");
[/Java]

Keine Ahnung ob das hilft, kannst es ja mal ausprobieren.
 
kannst vielleicht ein KSKB bauen was das ganze verdeutlicht, oder wie bei mir ... den Fehler verschwinden lässt ^^ .. und am Ende is was ganz anderes Schuld 😉
 
Bin mit dem KSKB grad bei "den Fehler verschwinden lässt" angekommen ... ich begeb mich mal auf die Suche...
 
Zuletzt bearbeitet:
Also ich glaube, ich kann den Fehler jetzt aktivieren ... seltsam ... seltsam

Solange die Zeilen durch "//" deaktiviert bleiben gehts, wenn nur 1 der Textfelder aktiviert wird, tritt der Fehler auf 🙁

[Java]
System.out.println("TEST");
inter.b_delete.setEnabled(false);
inter.b_change.setText("Erstellen");
// text_field_isbn.setText("");
// text_field_name.setText("");
// text_field_client.setText("");
// text_field_date.setText("");
cb_state.setSelectedItem("Andere");
// text_field_client_date.setText("");
// text_field_due_date.setText("");
// text_field_price.setText("");
text_area_notes.setText("");
text_area_summary.setText("");
[/Java]

Edit: I-wie will ich auf keinen grünen Ast kommen 🙁
 
Zuletzt bearbeitet:
ja gut da lässt sich ja nu gar nix erkennen 😀 .. kannst das mal mit main-Methode einwickeln und auf nen Frame packen, dann sollten wir das ja auch testen können.
 
ich geb ab, soviel code is doch n bissel arg 🙂 ... wenn ich meine Arbeit zu morgen schaffen sollte kann ich ja mal drüber guggn, aber das dauert bei mir noch minimum bis 12e 😀
 
Ich versuch mal weiter das Problem zu finden... allerdings weiß ich nicht welche Brotkrümelspur ich folgen soll...

Aber du hast recht, viel Platz für nen (schönen) kleinen Fehler 🙂

Edit:

Wenn ich diesen ActionListener

[Java] System.out.println("TEST");
inter.b_delete.setEnabled(false);
inter.b_change.setText("Erstellen");
// text_field_isbn.setText("");
// text_field_name.setText("");
// text_field_client.setText("");
// text_field_date.setText("");
cb_state.setSelectedItem("Andere");
// text_field_client_date.setText("");
// text_field_due_date.setText("");
// text_field_price.setText("");
text_area_notes.setText("");
text_area_summary.setText("");[/Java]

In die Klasse Interface2 übetrage, tritt der Fehler wieder beim wegnehmen der "//" auf.

Somit tritt der Fehler auch auf, wenn die ganze Klasse Operators nicht verwendet wird.

Edit2:

Ich hab mal rumprobiert und mehr rausgefunden:
Es ist nicht so, dass die Box nur einmal aufklappt. Sie klappt immer auf, jedoch nach ein- bis zweimal klappt sie hinter den TextAreas(welche direkt unter der Box sind) auf.
 
Zuletzt bearbeitet:
immerhin schonma paar hundert LOC's weniger 😀 ... es ist auch ein wenig mühsam in dem Code den Überblick zu gewinnen, glaube es ist besser wenn du eben Stück ür Stück alles ausblendest was scheinbar nix mit dem Problem zu tun hat. Irgendwann wird sich was aendern und da fängt die Suche an ^^
 
I
Edit2:

Ich hab mal rumprobiert und mehr rausgefunden:
Es ist nicht so, dass die Box nur einmal aufklappt. Sie klappt immer auf, jedoch nach ein- bis zweimal klappt sie hinter den TextAreas(welche direkt unter der Box sind) auf.

Container#setComponentZOrder

vielleicht kannst damit zaubern, ob das eine saubere Lösung ist möcht ich nicht beurteilen, aber vielleicht schafft es Abhilfe. Rufe diese Methode beim Erstellen der GUI auf, wenn alle Komponenten drauf liegen, und setz die ComboBox mal einfach auf 0, das würde sie als letztes Zeichnen lassen
 
ein wichtiger Punkt bei einem KSKB ist, dass es kompilierbar ist...

die ... in deinem Code tragen da nicht gerade positiv zu bei...

und bitte CamelCase Schreibweise verwenden... panel_area_left sowas sollte so aussehen panelAreaLeft
 
Code:
  popop_error_messages_creation_2(popup_00,l_popup_error_messages_0_0, l_popup_error_messages_0_1);
        
          popop_error_messages_creation_2(popup_10,l_popup_error_messages_10_0,l_popup_error_messages_10_1);

neh.. diesen Code schau ich mir doch nicht... bau mal ein gutes Beispiel wo man den Fehler nachvollziehn kann, dann helf ich gerne ;-)
 
Habs (endlich) geschafft das KSKB zu bauen

[Java]

import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;

public class KSKB {

public static void main(String args[])
{
frame.setSize(1024,768);
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

frame.setLayout(test_gl);

frame.add(menue1);
menue1.addActionListener(al_new_entry);
frame.add(cb_state);
frame.add(text_field_client);

cb_state.addItem("Vor Ort");
cb_state.addItem("Verliehen");
cb_state.addItem("Andere");

frame.setVisible(true);
}

static JButton menue1=new JButton("Neuer Eintrag");

static JComboBox cb_state=new JComboBox();

static JFrame frame=new JFrame();

static GridLayout test_gl=new GridLayout(3,1);

static TextField text_field_client=new TextField();


static ActionListener al_new_entry = new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
text_field_client.setText("");
cb_state.setSelectedItem("Andere");

}
};
}
[/Java]
 
lol du bist ja fies
Java:
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

gut das mein editor auch execution beenden kann ^^

frame.pack();

vorm visible hat geholfen .. als CloseOperation würde ich dir DIPOSE_ON_CLOSE empfehlen
 
wenn man noch ein paar Zeilen einfügt,... sieht man dass die liste unter dem textfeld ausklappt.

static GridLayout test_gl=new GridLayout(5,1);

warum weiß ich jetzt aber auch nicht ??
 
ja hatte er schon rausgefunden .. warum das pack() es löst kann ich auch net sagen (die Auswirkungen sind mir nich so detailliert bekannt) .. aber der Befehl gehört ja eh in jede Gui 😀
 
Das Problem dabei ist, dass pack nur solange die Probleme löst, bis ich mit setSize eine neue größe für das Fenster festlege ...

Das main JFrame sollte schon 1024*768 groß sein. 🙂

Edit:
lol du bist ja fies
Java Code: Quelltext in neuem Fenster öffnen

[Java]frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);[/Java]

Gibt ja im richtigen nen extra Button zum beenden, damit da auch alles richtig geschlossen wird.^^
 
Zuletzt bearbeitet:
Ob die Box geht, scheint von der Größe des JFrames abhängig zu sein.

Wenn das Frame 197x197 groß oder größer ist, tritt der Fehler auf, ist es kleiner, tritt er nicht auf ...

Ist der Fehler einmal aufgetreten und man verändert die Größe des Frames, wenn auch nur gering, so erscheint das Fenster wieder, bis der JButton das nächste mal gedrückt wird.

So gut kenne ich mich damit zwar nicht aus, aber die GUI scheint zu versagen würde, nur warum?
 
Zuletzt bearbeitet:
also so klappts
[Java]
inter.frame.setSize(1024,767);
inter.frame.setSize(1024,768);
[/Java]

Aber das kann doch net die beste Lösung sein oder?

Kennt jemand den Fehler oder muss ich mich mit dem Flicken zufrieden geben?
 
eigentlich kann das gar keine Lösung sein 😀 .. wenn man die Methoden einfach mal für sich betrachtet .. die Sache is eben, dsas keiner wirklich weiss warum das bei dir Auftritt
 
ich habs...

static JTextField text_field_client=new JTextField();

statt
TextField... das awt TextField hat sich vor die Swing JComboBox gelegt... das is ja dumm...

also Swing und AWT nie mischen..
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben