Affi
Affi

Reputation: 152

Decorating JOptionPane.showMessageDialog, like make borderless

Is is possible to create border-less message box in java swing or decorate it further?

Upvotes: 0

Views: 1186

Answers (1)

Sergiy Medvynskyy
Sergiy Medvynskyy

Reputation: 11327

You can use global listeners to implement required functionality. here is an example

import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.HierarchyEvent;

import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;

public class OptionPaneTest {

    public static void main(String[] args) {
        final AWTEventListener hierarchyListener = new AWTEventListener() {

            @Override
            public void eventDispatched(AWTEvent event) {
                final HierarchyEvent he = (HierarchyEvent) event;
                if (HierarchyEvent.HIERARCHY_CHANGED == he.getID() && he.getComponent() instanceof JOptionPane) {
                    final JDialog dlg = (JDialog) SwingUtilities.windowForComponent(he.getChangedParent());
                    if (dlg != null && !dlg.isUndecorated()) {
                        dlg.setUndecorated(true);
                    }
                }
            }
        };
        Toolkit.getDefaultToolkit().addAWTEventListener(hierarchyListener, AWTEvent.HIERARCHY_EVENT_MASK);
        JOptionPane.showMessageDialog(null, "No Border!!!");
        Toolkit.getDefaultToolkit().removeAWTEventListener(hierarchyListener);
        JOptionPane.showMessageDialog(null, "With Border!!!");
        System.exit(0);
    }
}

Upvotes: 2

Related Questions