2016-07-04 32 views
0

Gibt es eine Lösung dafür? Irgendeine alternative Bibliothek, die ich verwenden könnte, um das Dialogfeld auf dem Bildschirm des Mauszeigers anzuzeigen (kann Eltern nicht dafür verwenden)? Oder gibt es eine API, um den Dialog zu ändern?JOptionPane.showMessageDialog (Null, ...) zeigt immer den Dialog auf dem Hauptbildschirm an

Ich habe sogar versucht, einen nicht sichtbaren Eltern JFrame auf dem gewünschten Bildschirm, aber es hat nur Auswirkungen auf die Bildschirmpositionierung des Dialogfelds, wenn es beim Aufruf des Dialogs sichtbar ist. Mein "Spezialfall" ist, dass ich kein App-Fenster oder JFrame um den ich den Dialog kleben möchte. Es sollte immer in der Mitte des Bildschirms erscheinen, den der Benutzer gerade benutzt.

Antwort

1

Anstatt eine JOptionPane zu verwenden, empfehle ich stattdessen eine JDialog. Hier

ein Beispiel:

JOptionPane jOptionPane = new JOptionPane("Really do this?", JOptionPane.PLAIN_MESSAGE, JOptionPane.YES_NO_OPTION); 
JDialog jDialog = jOptionPane.createDialog("dialog title"); 

Um dann diese auf einem bestimmten Bildschirm können Sie die Grenzen des Bildschirms erhalten Sie wollen, und dann legen Sie Dialog in der Mitte von ihm, zum Beispiel:

Rectangle screenBounds = MouseInfo.getPointerInfo().getDevice().getDefaultConfiguration().getBounds(); 

int x = (int) screenBounds.getCenterX() - (jDialog.getWidth()/2); 
int y = (int) screenBounds.getCenterY() - (jDialog.getHeight()/2); 

jDialog.setLocation(x, y); 
jDialog.setVisible(true); 

prüfen Ergebnisse:

Object selectedValue = jOptionPane.getValue(); 
int dialogResult = JOptionPane.CLOSED_OPTION; 
if (selectedValue != null) { 
    dialogResult = Integer.parseInt(selectedValue.toString()); 
} 

switch (dialogResult) { 
    case JOptionPane.YES_OPTION: 
     LOG.info("yes pressed"); 
     break; 
    case JOptionPane.NO_OPTION: 
     LOG.info("no pressed"); 
     break; 
    case JOptionPane.CLOSED_OPTION: 
     LOG.info("closed"); 
     break; 
    default: 
} 
Verwandte Themen