JTextField nimmt keine Eingaben an, nach nachträglichem setVisible des JWindows

  • Themenstarter Themenstarter vanny
  • Beginndatum Beginndatum
V

vanny

Gast
Hi, ich bin noch JavaNeuling,

nun habe ich ein GUI zusammengebaut, bei dem ein Menü mit Buttons in einem JFrame, je nach Button ein anderes JWindow sichtbar macht [quasi ne toggle-funktion]. und ein Button öffnet einen extra JFrame passend zu dem zZt. sichtbaren JWindow....das klappt auch alles wunderbar.
Nun habe ich sowohl beim JWindow als auch beim JFrame ein JTextfield eingefügt.
Der Unterschied ist lediglich, dass das JWindow gleich beim Starten des Menüs initialisiert wird(ebne nur unsichtbar), und der JFrame halt erst wenn der Button gedrückt wird.
Im JWindow kann ich das JTextField nicht focusieren(demnach auch nicht reinschreiben) und im JFrame funktionierts bestens.
Muss also irgendwas mit dem setVisible zu tun haben... gibts da nen Trick?

Java:
public void actionPerformed(ActionEvent evt) {
        Object source = evt.getSource();
        if (source == b1){
            pan1.setBackground(new Color(40, 60, 90));
            fw.setVisible(true);
            fk.setVisible(false);
            fa.setVisible(false);
            watcherw = true;
            watcherk = false;
            watchera = false;
            fk.setVisible(false);
        }else if (source == b2){
            pan1.setBackground(new Color(120, 90, 80));
            fw.setVisible(false);
            fk.setVisible(true);
            fa.setVisible(false);
            watcherk = true;
            watcherw = false;
            watchera = false;
        }
        else if (source == b3){
            pan1.setBackground(new Color(0, 100, 0));
            fw.setVisible(false);
            fk.setVisible(false);
            fa.setVisible(true);
            watchera = true;
            watcherw = false;
            watcherk = false;
        }
        else if (source == neu){
            if (watcherw == true){
                frw = new frameWare();
            }else if(watcherk == true){
                frk = new frameKunde();
            }else if(watchera == true){
                fra = new frameAuktion();
            }
            }
        
        repaint();
    }

hier ist der Listener...vieleicht reicht das ja schon .... ist wie gesagt einn Test, darum keine Arrays oder ähnliches..

schonmal Danke im Voraus
Gruss Vanny
 
Ich seh nicht so ganz wofür du repaint am Ende aufrufst? Ich denke, was du machen musst ist einfach von den JWindows, die du auf visible setzt, jeweils noch die revalidate() Methode aufzurufen.

Edit:
So viel ich weiß, muss ein JWindow ein "owning parent" besitzen, damit zB eine Texteingabe funktioniert. Das heißt beim erzeuge des JWindows musst du dein Frame als owning parent angeben:
Java:
JWindow window = new JWindow(deinJFrame);
 
Zuletzt bearbeitet:
gut das mich deine Signatur eben nicht verwirrt hat ^^

danke schonmal ich werd´s mal ausprobieren...soweit ich dich verstanden habe: Faustregel Window needs Frame ^^

das repaint hab ich aus irgend einem Tutorial, auch das werd ich mal abchecken, dann gibts ne Rückmeldung hier

Gruss vanny

//edit aso der repaint war für die Hintergrundfarbe vom Menü, damit ich seh ob auch das richtige Window aufgeht ^^ ist also ein WiP-Überbleibsel, nicht verwirren lassen, dient nur der Selbstkontrolle^^
 
Zuletzt bearbeitet von einem Moderator:
Ok also den Frame ins Window stezen mag er mal garnicht!

Aber mit JFrame statt JWindow und dann einfach "setUndecorated(true)" klappt wunderbar und hat den gleichen Effekt wie das JWindow.
Problem gelöst, mitunter auch durch den Denkanstoß von dir nw90 😛
 
Meine Anmerkung mit dem revalidate() kannste eigentlich ignorieren 😉
Aber das mit dem owner parent funktioniert doch eigentlich? Habs gerade mal getestet, so gehts zumindest:
Java:
public class Main 
{
	public static void main(String[] args)
	{
		JFrame f = new JFrame();
		f.setSize(200,200);
		f.setVisible(true);
		
		JWindow w = new JWindow(f);
		JTextField tf = new JTextField();
		w.add(tf);
		w.setSize(200,200);	
		w.setLocation(250,250);
		w.setVisible(true);
	}
}

Aber einfach ein undecorated JFrame zu verwendet, so wie du es nu gemacht hast, geht ja auch.
...Ach und meine Signatur änder ich wirklich mal, danke für den Hinweis 😀
 

Zurück
Oben