У меня есть всплывающее окно, которое появляется во время загрузки программы. Это окно всплеска использует метод setAlwaysOnTop(true)
, который я бы предпочел сохранить.Как установить местоположение JOptionPane?
Проблема возникает, когда отдельная часть программы выдает JOptionPane, чтобы уведомить пользователя о необходимости обновления программного обеспечения. В Linux это появляется перед окном Splash, но в Windows он появляется позади, едва видимый пользователю, который затем может сидеть за 30 минут до того, как выяснит, почему он еще не загружен.
Исправление Я хотел бы реализовать это либо
- Принудительно JOptionPane выпадающее где-то на экране
или - Изменить местоположение, которое появляется JOptionPane на, так позиционирован вверху или внизу экрана заставки.
Единственная функция, которую я могу видеть, это будет метод setLocationRelativeTo(Component myComponent)
. Но это нехорошо, потому что нет ничего лучше, чем быть относительно (и ничего настоящего!).
Возможно ли это? Если да, то как мне это заняться?
Вот мой SSCCE (основаны от кода SeniorJD в их ответ):
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final Splash splash =new Splash();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
final Frame frame = new Frame("Frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
splash.dispose();
}
});
}
}
@SuppressWarnings("serial")
public class Frame extends JFrame implements ActionListener{
Frame(String title){
super(title);
JButton button = new JButton("Button");
add(button);
setAlwaysOnTop(true);
setSize(500, 500);
setLocationRelativeTo(getParent());
setAlwaysOnTop(true);
button.addActionListener(this);
actionPerformed(null);
}
@Override
public void actionPerformed(ActionEvent e) {
JOptionPane optionPane = new JOptionPane("Option Pane");
optionPane.showMessageDialog(this, "Message: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas tristique gravida congue.");
}
}
@SuppressWarnings("serial")
public class Splash extends JFrame {
public Splash() throws HeadlessException {
setAlwaysOnTop(true);
setUndecorated(true);
setVisible(true);
setSize(600, 450);
setLocationRelativeTo(getParent());
}
}
Это более руда менее эмулирует поведение мои пользователи видят. Как переместить JOptionPane с экрана заставки?
@AndrewThompson: нет такой вещи, как 'J2SE'. Это 'Java SE', начиная с нескольких лет. –
@AndrewThompson Вы в порядке? Тяжелый день? Смысл тот же. Потерпи. – SeniorJD
@AndrewThompson Я не на машине с кодом, и я редко когда-либо использовал этот класс. Несмотря на это, я исправил это. – Pureferret