Search code examples
javaswingjoptionpane

JOptionPane without button


I need to present a information message that needs to be in the screen for 5 seconds, during this time, user can't close the dialog. The specification says clearly that the dialog shouldn't have any button. Is there a way I can use JoptionPane.showMessageDialog in a way that the dialog have no button?


Solution

  • How about this way using showOptionDialog, maybe not showMessageDialog, but the same thing when we have no buttons or place to enter text (downfall is it can be closed by user):

    enter image description here

      JOptionPane.showOptionDialog(null, "Hello","Empty?", JOptionPane.DEFAULT_OPTION,JOptionPane.INFORMATION_MESSAGE, null, new Object[]{}, null);
    

    UPDATE

    Here is another way, it uses JOptionPane and JDialog (even better as it is uncloseable by user):

    enter image description here

    final JOptionPane optionPane = new JOptionPane("Hello world", JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null);
    
    final JDialog dialog = new JDialog();
    dialog.setTitle("Message");
    dialog.setModal(true);
    
    dialog.setContentPane(optionPane);
    
    dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    dialog.pack();
    
    //create timer to dispose of dialog after 5 seconds
    Timer timer = new Timer(5000, new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            dialog.dispose();
        }
    });
    timer.setRepeats(false);//the timer should only go off once
    
    //start timer to close JDialog as dialog modal we must start the timer before its visible
    timer.start();
    
    dialog.setVisible(true);