java - Close the JInternalFrame through JMenuItem -
hi creating internal frame, want close internalframe through menu item closed total frame. please me.
here code,
public class closewindow extends javax.swing.jframe { jtextarea tx; int i=0; public closewindow() { initcomponents(); } @suppresswarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="generated code">//gen-begin:initcomponents private void initcomponents() { tpane = new javax.swing.jtabbedpane(); jmenubar1 = new javax.swing.jmenubar(); jmenu1 = new javax.swing.jmenu(); crete = new javax.swing.jmenuitem(); close = new javax.swing.jmenuitem(); setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close); jmenu1.settext("file"); crete.settext("create"); crete.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { creteactionperformed(evt); } }); jmenu1.add(crete); close.settext("close"); close.addactionlistener(new java.awt.event.actionlistener() { public void actionperformed(java.awt.event.actionevent evt) { closeactionperformed(evt); } }); jmenu1.add(close); jmenubar1.add(jmenu1); setjmenubar(jmenubar1); javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane()); getcontentpane().setlayout(layout); layout.sethorizontalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addcomponent(tpane, javax.swing.grouplayout.alignment.trailing, javax.swing.grouplayout.default_size, 427, short.max_value) ); layout.setverticalgroup( layout.createparallelgroup(javax.swing.grouplayout.alignment.leading) .addcomponent(tpane, javax.swing.grouplayout.alignment.trailing, javax.swing.grouplayout.default_size, 279, short.max_value) ); pack(); }// </editor-fold>//gen-end:initcomponents private void creteactionperformed(java.awt.event.actionevent evt) {//gen-first:event_creteactionperformed actionevent ae=evt; final jinternalframe internalframe = new jinternalframe(""); i++; internalframe.setname("document"+i); internalframe.setclosable(true); internalframe.setsize(700, 700); tx = new jtextarea(); internalframe.add(tx); tpane.add(internalframe); internalframe.setsize(internalframe.getmaximumsize()); internalframe.pack(); internalframe.setvisible(true); internalframe.addinternalframelistener(new internalframeadapter() { @override public void internalframeclosing(internalframeevent e) { tpane.remove(internalframe); } }); } private void closeactionperformed(java.awt.event.actionevent evt) {//gen-first:event_closeactionperformed windowevent tabclosingevent = new windowevent(this,windowevent.window_closing); toolkit.getdefaulttoolkit().getsystemeventqueue().postevent(tabclosingevent); } public static void main(string args[]) { /* set nimbus , feel */ //<editor-fold defaultstate="collapsed" desc=" , feel setting code (optional) "> /* if nimbus (introduced in java se 6) not available, stay default , feel. * details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html */ try { (javax.swing.uimanager.lookandfeelinfo info : javax.swing.uimanager.getinstalledlookandfeels()) { if ("nimbus".equals(info.getname())) { javax.swing.uimanager.setlookandfeel(info.getclassname()); break; } } } catch (classnotfoundexception ex) { java.util.logging.logger.getlogger(closewindow.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (instantiationexception ex) { java.util.logging.logger.getlogger(closewindow.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (illegalaccessexception ex) { java.util.logging.logger.getlogger(closewindow.class.getname()).log(java.util.logging.level.severe, null, ex); } catch (javax.swing.unsupportedlookandfeelexception ex) { java.util.logging.logger.getlogger(closewindow.class.getname()).log(java.util.logging.level.severe, null, ex); } //</editor-fold> /* create , display form */ java.awt.eventqueue.invokelater(new runnable() { public void run() { new closewindow().setvisible(true); } }); } // variables declaration - not modify//gen-begin:variables private javax.swing.jmenuitem crete; private javax.swing.jmenuitem close; private javax.swing.jmenu jmenu1; private javax.swing.jmenubar jmenubar1; private javax.swing.jtabbedpane tpane; // end of variables declaration//gen-end:variables }
you creating new windowevent
windowevent tabclosingevent = new windowevent(this,....
and posting event queue. this
here refers main frame. that's why closed.
however, should not mess around event queue manually. instead, should respective actions programmatically method perform desired actions.
there parts of code between first {
, last }
might benefit slight cleanup, in order solve actual issue, change closeactionperformed
method this:
private void closeactionperformed(java.awt.event.actionevent evt) { component c = tpane.getselectedcomponent(); if (c instanceof jinternalframe) { jinternalframe f = (jinternalframe)c; f.dispose(); tpane.remove(f); } }
(btw: don't need internalframelistener
more)
Comments
Post a Comment