JWindow schließen bei einem Klick außerhalb der Anwendung?

Status
Nicht offen für weitere Antworten.

Hilefoks

Bekanntes Mitglied
Moin,

wie kann ich ein JWindow dazu bringen sich zu schließen wenn der Anwender z.B. auf den Desktop klickt? Ich habe es mit nem FocusListener probiert, hat aber leider nicht funktioniert?

MfG,
Hilefoks
 

JPKI

Top Contributor
Mit der Methode windowDeactivated(WindowEvent) von WindowListener?
Code:
jdialog.addWindowListener(new WindowAdapter() {
 public void windowDeactivated(WindowEvent e) {
  jdialog.dispose();
 }
});
 

André Uhres

Top Contributor
Was hast du im JWindow drin? Wenn keine fokusierbare Komponente drin ist (z.B. ein JButton),
dann kann es imho nicht funktionieren mit dem FocusListener.
EDIT:oder mit einem JLabel oder JPanel drin müsste es auch funktionieren, wenn du
ihn auf setFocusable(true) setzt.
EDIT 2:Oder vielleicht den JWindow selbst auf setFocusable(true) setzen.
 

Hilefoks

Bekanntes Mitglied
JPKI hat gesagt.:
Müsste aber klappen...?
Welches Betriebssystem benutzt du?
Welche JRE?
Gentoo, KDE 3.5.7 und Sun JDK 1.6.0.

André Uhres hat gesagt.:
Was hast du im JWindow drin? Wenn keine fokusierbare Komponente drin ist (z.B. ein JButton),
dann kann es imho nicht funktionieren mit dem FocusListener.
EDIT:oder mit einem JLabel oder JPanel drin müsste es auch funktionieren, wenn du
ihn auf setFocusable(true) setzt.
EDIT 2:Oder vielleicht den JWindow selbst auf setFocusable(true) setzen.
Da steckt neben anderen sowohl ein JPanel als auch ein JLabel drin... allerdings habe ich das mit dem FocusListener dann auch schnell wieder verworfen weil es eh nicht das ist was ich möchte. Das Fenster soll nicht bei verlusst des Focus, sondern erst beim Klick mit der Maus verschwinden - egal ob dieser Klick im Fenster (das ist natürlich einfach) oder ausserhalb passiert.

JPKI hat gesagt.:
Poste bitte mal den Versuch mit dem Window-Listener!
Wenig späktakulär - so etwa:
Code:
public class Main extends JWindow implements WindowListener {
	
	public static void main(String[] args) throws IOException {
		new Main();
	}

	public Main() {
		setSize(200, 200);
		addWindowListener(this);
		JButton b=new JButton("exit");
		b.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				dispose();
				System.exit(0);
			}
		});
		add(b);
		setEnabled(true);
		setVisible(true);
	}

	public void windowDeactivated(WindowEvent e) {
		System.out.println("JA!");
	}

	public void windowActivated(WindowEvent e) {}
	public void windowClosed(WindowEvent e) {}
	public void windowClosing(WindowEvent e) {}
	public void windowDeiconified(WindowEvent e) {}
	public void windowIconified(WindowEvent e) {}
	public void windowOpened(WindowEvent e) {}
}

MfG,
Hilefoks
 

merlin2

Top Contributor
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Main2 extends JFrame implements WindowListener {

   public static void main(String[] args) throws IOException {
      new Main2();
   }

   public Main2() {
      setSize(200, 200);
      addWindowListener(this);
      JButton b=new JButton("exit");
      b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            dispose();
            System.exit(0);
         }
      });
      add(b);
      setEnabled(true);
      setUndecorated(true);
      setVisible(true);
   }

   public void windowDeactivated(WindowEvent e) {
      System.out.println("JA!");
   }

   public void windowActivated(WindowEvent e) {}
   public void windowClosed(WindowEvent e) {}
   public void windowClosing(WindowEvent e) {}
   public void windowDeiconified(WindowEvent e) {}
   public void windowIconified(WindowEvent e) {}
   public void windowOpened(WindowEvent e) {}
}
So funktioniert es. Ist jetzt zwar ein JFrame, sieht aber gleich aus.
 

André Uhres

Top Contributor
merlin2 hat gesagt.:
..warum sollte es das tun?
Hilefoks hat gesagt.:
..Das Fenster soll nicht bei verlusst des Focus, sondern erst beim Klick mit der Maus verschwinden
- egal ob dieser Klick im Fenster (das ist natürlich einfach) oder ausserhalb passiert..

@merlin2: Wenn das Fenster "deactivated" wurde, dann weiss man nicht, ob das durch Mausklick geschah oder nicht.
 

JPKI

Top Contributor
Hilefoks hat gesagt.:
Das Fenster soll nicht bei verlusst des Focus, sondern erst beim Klick mit der Maus verschwinden
- egal ob dieser Klick im Fenster (das ist natürlich einfach) oder ausserhalb passiert
Wenn der Focus egal ist, ist mouseClicked() von MouseListener angebracht. Das Verlassen des Fensters kannst du mit mouseExited() überprüfen.
Edit: Schwachsinn, Hilefoks will ja, dass das Fenster auch bei einem Klick geschlossen wird, wenn es deaktiviert ist und keinen Fokus hat, oder ???:L ? Dann wär das was ich da oben geschrieben hab natürlich Schwachsinn :?: ???:L :bahnhof:
 

Hilefoks

Bekanntes Mitglied
JPKI hat gesagt.:
Edit: Schwachsinn, ...
:) Sorry - Ja ;-)

JPKI hat gesagt.:
...Hilefoks will ja, dass das Fenster auch bei einem Klick geschlossen wird, wenn es deaktiviert ist und keinen Fokus hat, oder ???:L ? Dann wär das was ich da oben geschrieben hab natürlich Schwachsinn :?: ???:L :bahnhof:
Richtig - ich möchte das sich das Fenster auch dann schließt wenn es deaktiviert ist und keinen Fokus hat. Ich habe aber noch Hoffnung das jemand eine gute Idee hat das hinzubekommen - irgendwie steckt diese Funktionalität ja in den Tiefen von Java, schließlich kann ein Popup eines Systray das ja auch....?!

MfG,
Hilefoks
 

André Uhres

Top Contributor
>Das Fenster soll nicht bei Verlust des Focus .. verschwinden.

>Ich möchte daß sich das Fenster auch dann schließt, wenn es .. keinen Fokus hat.

@Hilefoks: Du hast deine Erfordernisse zwar schon wiederholt geändert,
aber falls du dich jetzt doch für das letztere der beiden oben genannten entscheiden willst:
das geht mit FocusListener.
 

Hilefoks

Bekanntes Mitglied
André Uhres hat gesagt.:
@Hilefoks: Du hast deine Erfordernisse zwar schon wiederholt geändert...
Hab ich...? Möglich, aber:
Richtig - ich möchte das sich das Fenster auch dann schließt wenn es deaktiviert ist und keinen Fokus hat.
"auch dann" bezog sich auf den klick ohne das das Fenster den Focus besitzt...

Aber nochmal: Ich möchte das sich das Fenster bei einem klick des Anwenders schließt, auch dann wenn es nicht den Focus besitzt. Das Fenster öffnet sich und egal wo der Anwender klickt, das Fenster soll sich schließen. Nicht aber schon dann wenn es nur den Focus verliert. Also so wie es z.B. ein PopupMenu eines TrayIcons macht.

MfG,
Hilefoks
 

Hilefoks

Bekanntes Mitglied
Beispiel-Code:
Code:
public class Main {
	TrayIcon trayIcon;
	PopupMenu rpopup;
	JWindow lpopup;

	public static void main(String[] args) throws AWTException {
		new Main();
	}

	Main() throws AWTException {
		SystemTray tray=SystemTray.getSystemTray();
		trayIcon=new TrayIcon(new ImageIcon("").getImage(), "TestApp");
		trayIcon.setImageAutoSize(true);

		rpopup=new PopupMenu();
		rpopup.add(new MenuItem("Foo"));
		rpopup.add(new MenuItem("Bar"));

		lpopup=new JWindow();
		lpopup.add(new JButton("Bla"));
		lpopup.setSize(200, 50);
		
		trayIcon.setPopupMenu(rpopup);

		trayIcon.addMouseListener(new TrayIconMouseListener());
		tray.add(trayIcon);
	}

	class TrayIconMouseListener extends MouseAdapter {
		boolean showLPopup=true;

		public void mouseClicked(MouseEvent e) {
			if(e.getButton()==1) {
				if(showLPopup) {
					showLPopup=false;
					lpopup.setLocation((int) (e.getPoint().getX()-lpopup.getSize().getWidth()), (int) (e.getPoint().getY()-lpopup.getSize().getHeight()));
					lpopup.setVisible(true);
				}
				else { showLPopup=true; lpopup.setVisible(false); }
			}
			else if(e.getButton()==2)
				System.exit(0);
		}
	}
}

Das PopuMenu verhält sich hier so wie ich möchte... öffnet man es und klickt anschließend auf den Desktop, dann schließt es sich wieder. Das gleiche verhalten möchte ich auch für das JWindow implementieren, weiß aber nicht wie.

MfG,
Hilefoks
 

JPKI

Top Contributor
Wenn du noch andere Sprachen außer Java kannst, könntest du da eventuell was über JNI drehen...
 

Hilefoks

Bekanntes Mitglied
JPKI hat gesagt.:
Wenn du noch andere Sprachen außer Java kannst, könntest du da eventuell was über JNI drehen...
Ja schon... aber irgendwie gefällt mir dieser Ansatz nicht... es ist ein wenig wie "mit Kanonen auf Spatzen schießen". Aber ich mach mir darüber noch ein paar Gedanken. Das Problem an dieser Lösung ist eben das ganze dann auch plattformunabhängig zu realisieren bzw. das dann auch testen zu können - ich besitze weder MacOS noch Windows.

Kann ich ein PopupMenu (kein JPopupMenu) unsichtbar machen?
 

thE_29

Top Contributor
Code:
public class Main extends JWindow implements WindowListener{

   public static void main(String[] args) throws IOException {
      new Main();
   }

   public Main() {
      setSize(200, 200);
      addWindowListener(this);
      JButton b=new JButton("exit");
      b.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            dispose();
            System.exit(0);
         }
      });
      JComboBox bla = new JComboBox();
      bla.addItem("BLA 1");
      bla.addItem("BLA 2");
      add(bla);
//      add(b);

      setEnabled(true);
      setVisible(true);
   }

   public void windowDeactivated(WindowEvent e) {
      System.out.println("JA!");
   }

   public void windowActivated(WindowEvent e) {}
   public void windowClosed(WindowEvent e) {}
   public void windowClosing(WindowEvent e) {}
   public void windowDeiconified(WindowEvent e) {}
   public void windowIconified(WindowEvent e) {}
   public void windowOpened(WindowEvent e) {}
}

Hier geht das Popupmenu bei mir aber nicht zu!

Anscheinend ist das PopupMenu sein sehr merkürdiges Window oder eben gar keines :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JWindow bewegen, minimieren, vergrößern und schließen AWT, Swing, JavaFX & SWT 5
M JWindow schließen wenn Frame sich ändert AWT, Swing, JavaFX & SWT 2
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
V JWindow: Falsche Anzeige auf Ubuntu AWT, Swing, JavaFX & SWT 2
windl Overlay mit Transparentem JWindow und Canvas AWT, Swing, JavaFX & SWT 2
J JWindow und keylistener AWT, Swing, JavaFX & SWT 1
H Swing JTextField in JWindow, JWindow bekommt focus zurück? AWT, Swing, JavaFX & SWT 9
R KeyListener in JWindow AWT, Swing, JavaFX & SWT 7
M Swing Semi-Transparenter Button (normal, mouseover) auf transparentem JWindow AWT, Swing, JavaFX & SWT 44
M Animiertes Gif auf JWindow AWT, Swing, JavaFX & SWT 10
GUI-Programmer Swing JWindow - Programm wird ohne Grund beendet AWT, Swing, JavaFX & SWT 3
GUI-Programmer JWindow zwischen den Desktopbild und Dektopverknüpfungen AWT, Swing, JavaFX & SWT 16
N JOptionPane als JWindow AWT, Swing, JavaFX & SWT 2
J Swing JWindow flackert trotz Doppelpufferung AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
H Swing JWindow flackert beim resizen AWT, Swing, JavaFX & SWT 6
D JWindow rund machen AWT, Swing, JavaFX & SWT 11
hdi JWindow's mouseExited methode AWT, Swing, JavaFX & SWT 2
P JFrame/JWindow in der Mitte des Bildschirms positionieren AWT, Swing, JavaFX & SWT 4
R JWindow dockt nicht an JFrame bzw. nicht sichtbar ? AWT, Swing, JavaFX & SWT 6
M JWindow mit Rahmen(border) ausstatten AWT, Swing, JavaFX & SWT 4
C JWindow.setVisible(true) dauert ewig AWT, Swing, JavaFX & SWT 7
G JFrame/JWindow AWT, Swing, JavaFX & SWT 2
G JWindow Fensterhirachie beibringen AWT, Swing, JavaFX & SWT 14
R JWindow und JFrame AWT, Swing, JavaFX & SWT 3
S Bild auf JWindow platzieren AWT, Swing, JavaFX & SWT 4
L Probleme mit JTextField im JWindow AWT, Swing, JavaFX & SWT 4
F JWindow mit einem Bild und Transparenz AWT, Swing, JavaFX & SWT 4
L JWindow schliessen AWT, Swing, JavaFX & SWT 4
M jwindow --> jpanel --> jpanel --> textfeld nicht en AWT, Swing, JavaFX & SWT 3
D JWindow => transparent ? AWT, Swing, JavaFX & SWT 2
S JWindow zeichent Bild nicht AWT, Swing, JavaFX & SWT 2
K JWindow zerstören AWT, Swing, JavaFX & SWT 3
B KeyEvents und JWindow AWT, Swing, JavaFX & SWT 6
_user_q Kann man ein 2. JavaFX-Fenster auch beenden (exit) statt schließen (close) lassen? AWT, Swing, JavaFX & SWT 8
H Beim JFrame erstellen ein anderes schließen AWT, Swing, JavaFX & SWT 0
S GUI Schließen Button auf der linken Seite AWT, Swing, JavaFX & SWT 2
emma_louisa JavaFX MenuBar Zweitfenster; bei Button "Abbrechen" nur das Zweitfenster schließen AWT, Swing, JavaFX & SWT 2
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
T JavaFX Dialog schließt ohne dass es schließen soll AWT, Swing, JavaFX & SWT 1
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T Fenster schließen AWT, Swing, JavaFX & SWT 4
R JFrame schließen AWT, Swing, JavaFX & SWT 9
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
D JavaFX Beim Schließen (Rotes X) Code ausführen AWT, Swing, JavaFX & SWT 1
D Geöffnetes Dialogfenster schließen AWT, Swing, JavaFX & SWT 11
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
O Neuen JFrame öffnen und alten schließen AWT, Swing, JavaFX & SWT 7
D Swing Schließen von JDialog soll auch JFrame schließen. AWT, Swing, JavaFX & SWT 4
C Programm mit Passwort schließen AWT, Swing, JavaFX & SWT 5
E JavaFX JavaFX Fenster nicht schließen AWT, Swing, JavaFX & SWT 4
thet1983 offne Fenster gemeinsam schließen AWT, Swing, JavaFX & SWT 8
F Swing JDialog schließen - WindowListener bekommt dispose nicht mit AWT, Swing, JavaFX & SWT 0
U Swing Beim Bedienen eines Buttons JFrame schließen AWT, Swing, JavaFX & SWT 2
W SWT Dialog richtig schließen? AWT, Swing, JavaFX & SWT 0
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
F JavaFX KeyListener zum Fenster öffnen/schließen AWT, Swing, JavaFX & SWT 9
U Mehrere Oberflächeninstanzen seperat schließen AWT, Swing, JavaFX & SWT 5
VfL_Freak AWT Browser öffnen und schließen via java.awt.Desktop AWT, Swing, JavaFX & SWT 4
L Event Handling windowAdapter - NullPointerException beim Schließen AWT, Swing, JavaFX & SWT 5
R SWT Wizard schließen AWT, Swing, JavaFX & SWT 2
M Swing Einzelne Fenster schließen AWT, Swing, JavaFX & SWT 2
L SWT Eingabefelder beim Schließen des Forms auslesen AWT, Swing, JavaFX & SWT 3
M Swing ButtonListener Fenster schließen AWT, Swing, JavaFX & SWT 15
C Swing Wie kann ich im Programm das Menü schließen AWT, Swing, JavaFX & SWT 2
J Swing JInternalFrame schließen ändern? AWT, Swing, JavaFX & SWT 7
S JDialog per Button schließen AWT, Swing, JavaFX & SWT 2
M Fenster schließen - Listener AWT, Swing, JavaFX & SWT 5
D Neues Frame öffnen - und dazu altes schließen AWT, Swing, JavaFX & SWT 5
VfL_Freak Swing KeyListener, um einen Dialog per ESC zu schließen AWT, Swing, JavaFX & SWT 6
M JPopupMenu per Klick schließen und gleichzeitig ActionEvent auf JButton? AWT, Swing, JavaFX & SWT 15
S Fremdes Fenster schließen AWT, Swing, JavaFX & SWT 2
E Fenster schließen und ein anderes öffnen AWT, Swing, JavaFX & SWT 9
L Frame Schließen und neustarten AWT, Swing, JavaFX & SWT 4
qwerqer Swing JDialog Darstellungsprobleme - Dialog lässt sich nicht schließen AWT, Swing, JavaFX & SWT 3
Madlip SWT DateTime Widget Schließen AWT, Swing, JavaFX & SWT 4
K beim Schließen des JFrames, Methode aufrufen AWT, Swing, JavaFX & SWT 3
X Öffnen Schließen Fenster AWT, Swing, JavaFX & SWT 4
J Schließen über x soll zwei Prozesse beenden AWT, Swing, JavaFX & SWT 7
J Programm schließen AWT, Swing, JavaFX & SWT 4
H Anwendung schließen ohne System.exit AWT, Swing, JavaFX & SWT 5
0 Fenster schließen AWT, Swing, JavaFX & SWT 2
B AWT mehrere Fenster schließen AWT, Swing, JavaFX & SWT 8
S JPopupMenu schließen in SystemTray AWT, Swing, JavaFX & SWT 2
D Fenster schließen AWT, Swing, JavaFX & SWT 7
S AWT Fenster schließen und Programm beenden AWT, Swing, JavaFX & SWT 10
F Swing JFrame Methode beim Schließen aufrufen AWT, Swing, JavaFX & SWT 5
2 Zusätzliches Fenster mit OK-Button schließen AWT, Swing, JavaFX & SWT 7
B Fenster schließen AWT, Swing, JavaFX & SWT 4
N Swing Von 2 dimensionalem Array auf JTextfield schließen und färben AWT, Swing, JavaFX & SWT 6
W Swing Event bei Schließen des Fensters AWT, Swing, JavaFX & SWT 6
I Fenster schließen - Button AWT, Swing, JavaFX & SWT 13
S Swing JPopupMenu nicht schließen AWT, Swing, JavaFX & SWT 2
G Swing Fenster schließen AWT, Swing, JavaFX & SWT 6
R WindowClosing Event - Schließen rückgängig machen? AWT, Swing, JavaFX & SWT 2
aze FlowLayout:Lücken "schließen" AWT, Swing, JavaFX & SWT 2
D Swing Dialog schließen verhindern bei Fehleingabe AWT, Swing, JavaFX & SWT 2
T Schließen eines JDialogs setzen den JFrame in den Hintergrund AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben