java - Why JDialog not displaing properly -


i have created method display message in dialog size of dialog changes each time run java swing application below link screen shot of dailog:

improrer message box display
proper message box display

below method (setmsgdialog) have created jdialog display

public class democlass {     private static jdialog msgdialog;     private static jpanel msgpanel;     private static jlabel msglabel;     private static jbutton msgbutton;      democlass()     {         msgdialog = new jdialog(msgdialog,"message",jdialog.modalitytype.application_modal);         msgpanel = new jpanel(null);         msglabel = new jlabel();         msgbutton = new jbutton("close");     }      public static void setmsgdialog(string msg)     {         msgdialog.setmodal(true);         msgdialog.setsize(400,125);         msgdialog.setresizable(false);         msgdialog.setlocationrelativeto(null);         msglabel.settext(msg);         msgbutton.settext("close");         msglabel.setbounds(25, 25, 375, 30);         msgbutton.setbounds(160,70,80,30);         msgpanel.add(msglabel);         msgpanel.add(msgbutton);         msgdialog.add(msgpanel);         msgdialog.setvisible(true);     }      public static void main(string[] args)     {         democlass msgbox = new democlass();         msgbox.setmsgdialog("please login first");     } } 

please tell me doing wrong. have inorder display jdialog correctly.

you ask why jdialog not displaying properly, , main reason code ignores layout managers components use. quick , terrible solution use absolute or null layout, not recommended component placement makes inflexible gui's while might on 1 single platform , screen resolution, terrible on other platforms or screen resolutions , difficult update , maintain.

suggestions:

  • get rid of setsize(...), setbounds(...) , like.
  • use layout managers size , position components.
  • pack before displaying dialog.
  • don't over-use static modifier in program.
  • you code below, having shown this, joptionpane easiest way display type of message.

import java.awt.borderlayout; import java.awt.component; import java.awt.font; import java.awt.gridbaglayout; import java.awt.window; import java.awt.event.actionevent; import java.awt.event.keyevent; import javax.swing.*;  @suppresswarnings("serial") public class democlass2 extends jpanel {    // constants    private static final string title = "message";    private static final float label_points = 24f;    private static final int l_gap = 15;    private static final int b_gap = 25;     // static poor man's singlton instance    private static democlass2 democlass2;    private jdialog dialog = new jdialog();    private jlabel label = new jlabel("", swingconstants.center);     public democlass2() {       dialog.setmodal(true);       dialog.settitle(title);        label.setfont(label.getfont().derivefont(font.bold, label_points));       label.setborder(borderfactory.createemptyborder(l_gap, l_gap, l_gap, l_gap));        jpanel btnpanel = new jpanel(new gridbaglayout());       btnpanel.setborder(borderfactory.createemptyborder(b_gap, b_gap, b_gap, b_gap));       btnpanel.add(new jbutton(new disposeaction("close", keyevent.vk_c)));        setlayout(new borderlayout());       //setborder(border);       add(label, borderlayout.page_start);       add(btnpanel, borderlayout.center);        dialog.getcontentpane().add(this);    }     private void setmessage(string message) {       label.settext(message);    }     private void display() {       dialog.setresizable(false);       dialog.pack();       dialog.setlocationrelativeto(null);       dialog.setvisible(true);    }     public void setmessageanddisplay(string message) {       setmessage(message);       display();    }     public static void displaymessage(string message) {       if (democlass2 == null) {          democlass2 = new democlass2();       }       democlass2.setmessageanddisplay(message);    }     private class disposeaction extends abstractaction {       public disposeaction(string name, int mnemonic) {          super(name);          putvalue(mnemonic_key, mnemonic);       }        @override       public void actionperformed(actionevent e) {          component c = (component) e.getsource();          if (c == null) {             return;          }          window win = swingutilities.getwindowancestor(c);          if (win == null) {             return;          }          win.dispose();                }    }     private static void createandshowgui() {       democlass2.displaymessage("fubars rule!!!");        democlass2.displaymessage("this bit of longer message. dialog should bigger.");    }     public static void main(string[] args) {       swingutilities.invokelater(new runnable() {          public void run() {             createandshowgui();          }       });    } } 

Comments