Java: Absolute Koordinaten von JComponent ermitteln

    • Java: Absolute Koordinaten von JComponent ermitteln

      Ist es möglich von einem JComponent-Objekt, genauer gesagt einem JButton, die absoluten Koordinaten zu ermitteln - spricht von den äußeren Bildschirmrändern.
      Ich möchte nämlich, dass nach dem Klick auf einen Button ein kleines JWindow als Auswahl-Panel aufspringt - und zwar exakt unter diesem Button, egal wo das Fenster sich befindet bzw wie groß es aufgezogen wurde.
      Ferner wäre noch interessant, wie ich das JWindow nach Verlust des Fokus wieder verschwinden lassen kann. Über addFocusListener() hatte ich bisher kein Glück ...

      EDIT: Ich habe mittlerweile in einem anderen Forum eine Antwort erhalten, über die Methode getLocationOnScreen() des JComponent-Objekts, lässt sich die genaue Position der Komponente am Bildschirm ermitteln.
      Offen bleibt immer noch wie ich das JWindow, nachdem es den Fokus verloren hat, automatisch schließen kann :(

      Java-Quellcode

      1. import java.awt.*;
      2. import java.awt.event.*;
      3. import javax.swing.*;
      4. public class SpecialTagsPanel implements ActionListener {
      5. JWindow win;
      6. JComponent component;
      7. public SpecialTagsPanel( JComponent jc ) {
      8. this.component = jc;
      9. }
      10. public void actionPerformed( ActionEvent e ) {
      11. initPanel();
      12. }
      13. public void initPanel() {
      14. Point coords = this.component.getLocationOnScreen();
      15. this.win = new JWindow();
      16. this.win.setBounds( coords.x, (coords.y+this.component.getHeight()), 400, 200 );
      17. this.win.setAlwaysOnTop( false );
      18. this.win.addFocusListener(
      19. new FocusListener() {
      20. public void focusGained( FocusEvent fe ) {
      21. System.out.println("focus");
      22. }
      23. public void focusLost( FocusEvent fe ) {
      24. win.setVisible( false );
      25. win.dispose();
      26. component.setEnabled( true );
      27. System.out.println("no focus");
      28. }
      29. }
      30. );
      31. JPanel panel = new JPanel();
      32. panel.setBorder( BorderFactory.createLineBorder(Color.BLACK) );
      33. panel.add( new JLabel("Noch nicht verfügbar!") );
      34. this.win.getContentPane().add( panel );
      35. this.win.setVisible( true );
      36. this.component.setEnabled( false );
      37. }
      38. }
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Christoph ()

    • Java: Absolute Koordinaten von JComponent ermitteln

      Ist es möglich von einem JComponent-Objekt, genauer gesagt einem JButton, die absoluten Koordinaten zu ermitteln - spricht von den äußeren Bildschirmrändern.
      Ich möchte nämlich, dass nach dem Klick auf einen Button ein kleines JWindow als Auswahl-Panel aufspringt - und zwar exakt unter diesem Button, egal wo das Fenster sich befindet bzw wie groß es aufgezogen wurde.
      Ferner wäre noch interessant, wie ich das JWindow nach Verlust des Fokus wieder verschwinden lassen kann. Über addFocusListener() hatte ich bisher kein Glück ...

      EDIT: Ich habe mittlerweile in einem anderen Forum eine Antwort erhalten, über die Methode getLocationOnScreen() des JComponent-Objekts, lässt sich die genaue Position der Komponente am Bildschirm ermitteln.
      Offen bleibt immer noch wie ich das JWindow, nachdem es den Fokus verloren hat, automatisch schließen kann :(

      Java-Quellcode

      1. import java.awt.*;
      2. import java.awt.event.*;
      3. import javax.swing.*;
      4. public class SpecialTagsPanel implements ActionListener {
      5. JWindow win;
      6. JComponent component;
      7. public SpecialTagsPanel( JComponent jc ) {
      8. this.component = jc;
      9. }
      10. public void actionPerformed( ActionEvent e ) {
      11. initPanel();
      12. }
      13. public void initPanel() {
      14. Point coords = this.component.getLocationOnScreen();
      15. this.win = new JWindow();
      16. this.win.setBounds( coords.x, (coords.y+this.component.getHeight()), 400, 200 );
      17. this.win.setAlwaysOnTop( false );
      18. this.win.addFocusListener(
      19. new FocusListener() {
      20. public void focusGained( FocusEvent fe ) {
      21. System.out.println("focus");
      22. }
      23. public void focusLost( FocusEvent fe ) {
      24. win.setVisible( false );
      25. win.dispose();
      26. component.setEnabled( true );
      27. System.out.println("no focus");
      28. }
      29. }
      30. );
      31. JPanel panel = new JPanel();
      32. panel.setBorder( BorderFactory.createLineBorder(Color.BLACK) );
      33. panel.add( new JLabel("Noch nicht verfügbar!") );
      34. this.win.getContentPane().add( panel );
      35. this.win.setVisible( true );
      36. this.component.setEnabled( false );
      37. }
      38. }
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Christoph ()