Mettre la main sur une référence à l'objet créé par des méthodes statiques JOptionPane

StackOverflow https://stackoverflow.com/questions/4542924

  •  13-10-2019
  •  | 
  •  

Question

Je me demande s'il est possible de mettre la main sur une référence au (JDialog?) Objet créé par l'une de ces méthodes statiques de JOptionPane (par exemple showMessageDialog)? Je souhaite modifier la position où la boîte de dialogue apparaît à l'écran. Plus précisément, je veux que le dialogue apparaisse dans le coin supérieur gauche de la fenêtre principale de l'application, au lieu du centre de la fenêtre par défaut. Donc, avoir une référence à l'objet me permettre d'utiliser setLocation pour obtenir l'effet désiré ...

Toute suggestion serait appréciée! Merci!

Était-ce utile?

La solution

Les méthodes de showXXXDialog() statiques ne sont que pour des raisons pratiques. Si vous regardez le code source pour JOptionPane, vous constaterez que dans la réalité, un objet JOptionPane est créé sur la base des options que vous spécifiez et JOptionPane.createDialog(...) est appelé. Une méthode pour afficher votre boîte de message à une position différente est:

JOptionPane pane = new JOptionPane("Message", JOptionPane.WARNING_MESSAGE,
        JOptionPane.DEFAULT_OPTION);
JDialog dialog = pane.createDialog("TITLE");
dialog.setLocation(0, 0);
dialog.setVisible(true);

// dialog box shown here

dialog.dispose();
Object selection = pane.getValue();

Avec une combinaison de paramètres au constructeur de JOptionPane, et les méthodes de jeu de JOptionPane, vous pouvez faire tout ce que vous auriez fait avec les méthodes statiques, plus vous avez accès à l'objet JDialog lui-même.

ÉDITÉ : (à ajouter par exemple de dialogue d'entrée pour OP)

JOptionPane pane = new JOptionPane("Message", JOptionPane.QUESTION_MESSAGE,
        JOptionPane.OK_CANCEL_OPTION, null, null, null);
pane.setWantsInput(true);
JDialog dialog = pane.createDialog(null, "Title");
dialog.setLocation(0, 0);
dialog.setVisible(true);

String str = (String) pane.getInputValue();

Autres conseils

Le JOptionPane utilisera le parentComponent donné (premier paramètre de méthode) pour déterminer où centrer la boîte de dialogue (par exemple dans javax.swing.JOptionPane.showMessageDialog (Component, Object))

Vous pouvez essayer de passer dans un composant de faux qui positionne la boîte de dialogue à un autre endroit, par exemple comme ceci:

    JFrame frame = new JFrame("Test");
    frame.setLocation(100, 100);
    frame.setSize(500, 500);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    // 'Invisible' fake component for positioning
    JWindow c = new JWindow();
    c.setSize(0, 0);
    c.setVisible(true);
    Point location = frame.getLocation();
    location.translate(200, 100);
    c.setLocation(location);

    JOptionPane.showInputDialog(c,"Foo");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top