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
Post a Comment