java - how to keep minimized jinternalframe on top -
i have 4 internal frames , 3 buttons in .when nail maximize button,maximizes overlaps frames.but point should show minimized frames. please find code below
bundle project; import java.awt.dimension; import java.awt.gridlayout; import java.awt.headlessexception; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.beans.propertyvetoexception; import javax.swing.jbutton; import javax.swing.jdesktoppane; import javax.swing.jframe; import javax.swing.jinternalframe; import javax.swing.jpanel; import javax.swing.swingutilities; import javax.swing.plaf.basic.basicinternalframetitlepane; import javax.swing.plaf.basic.basicinternalframeui; public class test { public test() throws headlessexception, propertyvetoexception { createandshowgui(); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { seek { new test(); } grab (headlessexception ex) { //logger.getlogger(minpanel1.class.getname()).log(level.severe, null, ex); } grab (propertyvetoexception ex) { // logger.getlogger(minpanel1.class.getname()).log(level.severe, null, ex); } } }); } private void createandshowgui() throws headlessexception, propertyvetoexception { jframe frame = new jframe(); frame.setresizable(true); frame.setdefaultcloseoperation(jframe.dispose_on_close); final jdesktoppane jdp = new jdesktoppane() { @override public dimension getpreferredsize() { homecoming new dimension(400, 400); } }; frame.setcontentpane(jdp); frame.pack(); createandaddinternalframe(jdp, 0, 0); createandaddinternalframe(jdp, 200, 0); createandaddinternalframe(jdp, 400, 0); createandaddinternalframe(jdp, 600, 0); frame.setvisible(true); } private void createandaddinternalframe(final jdesktoppane jdp, int x, int y) throws propertyvetoexception { final jinternalframe jinternalframe = new jinternalframe("test1", true, true, true, true); jinternalframe.setlocation(x, y); final jinternalframe jinternalframe1 = new jinternalframe("test2", true, true, true, true); jpanel jp= new jpanel(); jbutton jb1 = new jbutton("min"); jbutton jb2 = new jbutton("[]"); jbutton jb3 = new jbutton("x"); jinternalframe.setlayout(new gridlayout(2, 2,2,2)); jinternalframe1.add(jb1); jinternalframe.setsize(200, 200);//testing jinternalframe.setlayout(new gridlayout(2,2)); jbutton jb= new jbutton("min"); // jinternalframe.add(jb); // jinternalframe.add(jb3); //jinternalframe.add(jb2); jp.add(jb); jp.add(jb2); jp.add(jb3); jinternalframe.add(jp); jb.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { jinternalframe.seticon(true); } grab (propertyvetoexception ex) { } } }); jb1.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { jinternalframe.seticon(true); } grab (propertyvetoexception ex) { } } }); jb2.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { jinternalframe.setmaximum(true); } catch(exception e) { } } });jb3.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { jinternalframe.dispose(); } grab (exception ex) { } } }); basicinternalframetitlepane titlepane = (basicinternalframetitlepane) ((basicinternalframeui) jinternalframe.getui()).getnorthpane(); jinternalframe.remove(titlepane); jinternalframe.setvisible(true); jinternalframe1.setvisible(true); jdp.add(jinternalframe); //jdp.add(jinternalframe1); } }
you try: jdesktoppane#setcomponentzorder(component com, int i). as per docs:
moves specified component specified z-order index in container. z-order determines order components painted; component highest z-order paints first , component lowest z-order paints last. components overlap, component lower z-order paints on component higher z-order.
...
note:
not platforms back upwards changing z-order of heavyweight components 1 container without phone call removenotify. there no way observe whether platform supports this, developers shouldn't create assumptions.
this allow set order of jinternalframes contained within jdesktoppane.
update:
as per comment:
from can see default behavior , doesnt seem on com-able jdesktoppane#setcomponentzorder(component com, int i) when jinternalframe iconified. works fine when in normal state
solution:
i suggest adjusting layer on maximized jinternalframe shown:
jb2.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { if (jinternalframe.ismaximum()) {//restore jinternalframe.pack(); } else {//maximize jinternalframe.setmaximum(true); } jdp.remove(jinternalframe); jdp.add(jinternalframe, jdesktoppane.frame_content_layer); jdp.revalidate(); jdp.repaint(); } grab (exception e) { e.printstacktrace(); } } }); we must not forget add together default_layer when minimized:
jb.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { if (jinternalframe.getlayer() == jdesktoppane.frame_content_layer) { jdp.remove(jinternalframe); jdp.add(jinternalframe, jdesktoppane.default_layer); jdp.revalidate(); jdp.repaint(); } jinternalframe.pack(); jinternalframe.seticon(true); } grab (propertyvetoexception ex) { } } }); here total code:
import java.awt.dimension; import java.awt.gridlayout; import java.awt.headlessexception; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.beans.propertyvetoexception; import javax.swing.jbutton; import javax.swing.jdesktoppane; import javax.swing.jframe; import javax.swing.jinternalframe; import javax.swing.jpanel; import javax.swing.swingutilities; import javax.swing.plaf.basic.basicinternalframetitlepane; import javax.swing.plaf.basic.basicinternalframeui; public class test { public test() throws headlessexception, propertyvetoexception { createandshowgui(); } public static void main(string[] args) { swingutilities.invokelater(new runnable() { @override public void run() { seek { new test(); } grab (headlessexception ex) { ex.printstacktrace(); } grab (propertyvetoexception ex) { ex.printstacktrace(); } } }); } private void createandshowgui() throws headlessexception, propertyvetoexception { jframe frame = new jframe(); frame.setdefaultcloseoperation(jframe.dispose_on_close); final jdesktoppane jdp = new jdesktoppane() { @override public dimension getpreferredsize() { homecoming new dimension(600, 400); } }; frame.setcontentpane(jdp); frame.pack(); createandaddinternalframe(jdp, 0, 0); createandaddinternalframe(jdp, 300, 0); createandaddinternalframe(jdp, 0, 200); frame.setvisible(true); } private void createandaddinternalframe(final jdesktoppane jdp, int x, int y) throws propertyvetoexception { final jinternalframe jinternalframe = new jinternalframe("test1", true, true, true, true); jinternalframe.setlocation(x, y); jpanel jp = new jpanel(); jbutton jb = new jbutton("min"); jbutton jb2 = new jbutton("max/restore"); jbutton jb3 = new jbutton("close"); jinternalframe.setlayout(new gridlayout(2, 2)); jp.add(jb); jp.add(jb2); jp.add(jb3); jinternalframe.add(jp); jb.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { if (jinternalframe.getlayer() == jdesktoppane.frame_content_layer) { jdp.remove(jinternalframe); jdp.add(jinternalframe, jdesktoppane.default_layer); jdp.revalidate(); jdp.repaint(); } jinternalframe.pack(); jinternalframe.seticon(true); } grab (propertyvetoexception ex) { ex.printstacktrace(); } } }); jb2.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { if (jinternalframe.ismaximum()) {//restore jinternalframe.pack(); } else {//maximize jinternalframe.setmaximum(true); } jdp.remove(jinternalframe); jdp.add(jinternalframe, jdesktoppane.frame_content_layer); jdp.revalidate(); jdp.repaint(); } grab (exception e) { e.printstacktrace(); } } }); jb3.addactionlistener(new actionlistener() { @override public void actionperformed(actionevent ae) { seek { jinternalframe.dispose(); } grab (exception ex) { ex.printstacktrace(); } } }); basicinternalframetitlepane titlepane = (basicinternalframetitlepane) ((basicinternalframeui) jinternalframe.getui()).getnorthpane(); jinternalframe.remove(titlepane); jinternalframe.pack(); jinternalframe.setvisible(true); jdp.add(jinternalframe); } } java swing layout jinternalframe jdesktoppane
No comments:
Post a Comment