2016-07-04 4 views
0

Есть ли какое-либо решение? Любая альтернативная библиотека, которую я могу использовать для отображения диалогового окна на экране указателя мыши (для этого нельзя использовать родительский элемент)? Или есть ли api для изменения экрана диалога?JOptionPane.showMessageDialog (null, ...) всегда показывает диалог на основном экране

Я даже попытался использовать невидимый родительский JFrame на нужном экране, но он оказывает какое-либо влияние на позиционирование экрана диалога, если он отображается при вызове диалога. Мой «специальный случай» заключается в том, что у меня нет окна приложения или JFrame, вокруг которого я хочу вставить диалог. Он должен всегда отображаться в центре экрана, который пользователь использует в настоящее время.

ответ

1

Вместо того, чтобы использовать JOptionPane, я рекомендую вместо этого использовать JDialog.

Вот пример:

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

Чтобы затем отобразить это на конкретном экране вы можете получить границы экрана вы хотите, и затем поместить ваш диалог в его центре, например:

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); 

результаты проверки:

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: 
}