Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
habe mal wieder ein Problemchen, zum dem ich eine Idee suche. Möglicherweise kann jemand weiterhelfen:
Ich möchte gerne das zuletzt aktive Fenster erhalten. Gibt es dazu eine einfache Methode?
Im Netz habe ich zwei Klassen gefunden. Eine ist ein FocusListener und kann über focusGained(FocusEvent e) und focusLost(FocusEvent e) die Referenz zur zuletzt "angeklickten" Komponente ablegen.
Das Problem liegt nun beim Initialisieren. Zu Beginn ist die Komponente leider null und reagiert erst wenn man sie anklickt und dann ein zweites Fenster anklickt.
Gibt es eine Möglichkeit eine JComponent mit einem Wert, der nicht null ist, zu initialisieren? e.getComponent oder e.getOppositeComponent ist etwas wie
xyz[,0,0,700x472,layout=java.awt.FlowLayout,alignmentX=0.0,ali ... Das kann ich nicht zuweisen. Danke.
Wenn es darum geht das aktive/fokussierte Fenster zu erhalten um zum Beispiel eine Meldungsbox auf dem korrekten Bildschirm, inkl. Fensterposition, auszugeben, kannst du folgendes verwenden:
Um an das vorherige aktive Fenster zu kommen wüssste ich nur die Möglichkeit das du deine eigene Überwachung implementierst und immer wieder das aktive Fenster abfragst und für deinen Fall die letzten zwei zu speichern.
Falls das alles nicht das ist was du wolltest würde ich dich bitten die Frage noch ein mal detaillierter zu stellen,
bzw. das zu schreiben was du im Ziel vorhast
Danke für die Antwort.
Ich habe vor das "zuletzt aktive Fenster" zu speichern um dort irgendwas zu machen (nur dort, während das zweite Fenster, das auch von den Steuerelementen angesprchen wird nichts tut), z. B. wenn mehrere Fenster offen sind. Hatte die Frage falsch gestellt. Konnte mich aber nicht im Forum einloggen.
Das Problem ist, dass ich immer über die Erzeugung von new MeinErstesFenster(), new meinZweitesFenster(), etc. das zuletzt aktive Fenster erhalte und auch bedienen kann, aber leider immer wenn ich ein offenes Fenster anklicke jeweils eine neue Instanz erstelle. Da ich gerade aufräume, stört mich das, obwohl es funktioniert.
Also die Frage ist eigentlich wie ich im "zuletzt aktiven Fenster " etwas ändern kann, ohne Inhalte eines weiteren Fensters zu ändern und ohne dabei eine neue Instanz zu machen.
Diese Klasse legt die Referenz zur zuletzt "angeklickten" Komponente ab (focusLost):
ziel.setLastFocusedComponent(e.getComponent()); //in MeineKlasse(), MeineKlasse1,MeineKlasse2
Java:
class PanelFocusListener implements FocusListener {
private MeineKlasse ziel;
boolean havefocus = false;
static Component st= null;
private Component lastFocusedComponent;
public PanelFocusListener() {
}
public PanelFocusListener(MeineKlasse zielMeineKlasse1) {
this.ziel =zielMeineKlasse1;
}
//private final ArrayList<MeineKlasse> folisteners = new ArrayList<>();
public void focusGained(FocusEvent fe) {
setHavefocus(true);
System.out.println(" focusGained -----------"+isHavefocus()+ " " + fe.getComponent()+ "-------------" );
fe.getComponent().setBackground(Color.yellow);
if (!fe.getClass().getName().equals("javax.swing.JButton")
|| !fe.getClass().getName().equals("javax.swing.JTextField")|| !fe.getClass().getName().equals("awechsel.ActionPanel")
|| !fe.getClass().getName().equals("awechsel.MeineKlasse1")|| !fe.getClass().getName().equals("awechsel.MeineKlasse2"))
{setSt(null);}
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
setSt(e.getComponent());//???
setHavefocus(false);
System.out.println("focusLost----------- "+isHavefocus()+ " " + e.getComponent()+ "-------------" );
e.getComponent().setBackground(Color.lightGray);
//e.getComponent().repaint();
ziel.setLastFocusedComponent(e.getComponent());
System.out.println("getLastFocusedComponent(): "+ ziel.getLastFocusedComponent());
if (e.getComponent().getClass().getName().equals("awechsel.MeineKlasse1") ||
e.getComponent().getClass().getName().equals("awechsel.MeineKlasse2")) {
MeineKlasse2 t2= new MeineKlasse2(ziel.getLastFocusedComponent());
MeineKlasse1 t1 = new MeineKlasse1(ziel.getLastFocusedComponent());
}
}
public boolean isHavefocus() {
return havefocus;
}
public void setHavefocus(boolean havefocus) {
this.havefocus = havefocus;
}
public Component getSt() {
return st;
}
public void setSt(Component st) {
this.st = st;
}
}
//In MeineKlasse1 und MeineKlasse2 werden Panels unterschieden
[CODE]
public MeineKlasse1(){
public void setLastFocusedComponent(Component newLastFocusedComponent) {
this.lastFocusedComponent = newLastFocusedComponent;
}
public Component getLastFocusedComponent() {
return lastFocusedComponent;
}
public void onePanelOnly(Component getlfcst) {
//TEST OKT 21
System.out.println("BIN IN onePanelonly MeineKlasse1");
this.stcomp = getlfcst;
//System.out.println("getlfcst: " + getlfcst + pfl.havefocus);
if (getlfcst != null && getlfcst.getClass().getName().equals("awechsel.MeineKlasse1")){
System.out.println("in onePanelOnly MeineKlasse1 - true: " + stcomp.getClass().getName() + " --(Übereinstimmung MeineKlasse1)--");
} else if (getlfcst != null && !getlfcst.getClass().getName().equals("awechsel.MeineKlasse1")) {
System.out.println("in onePanelOnly MeineKlasse1 - false: " + stcomp.getClass().getName()+ " --(Keine Übereinstimmung)--");
}
}
[/CODE]
Wie kann man das ohne neue Instanz machen? Habe schon einige Zeit versucht das zu lösen, es geht aber nicht. Irgendwie wird es dann nicht sofort upgedated. Danke schonmal.