Reputation: 1675
i designed java desktop application in that application when i press a button another Jframe is shown that draws a tree but when i close the Jframe whole operation is close but i only want to close that Jfarme what should i do? here is the jframe codes:
public class DrawTree extends JFrame{
public int XDIM, YDIM;
public Graphics display;
@Override
public void paint(Graphics g) {} // override method
// constructor sets window dimensions
public DrawTree(int x, int y)
{
XDIM = x; YDIM = y;
this.setBounds(0,0,XDIM,YDIM);
this.setVisible(false);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
display = this.getGraphics();
// draw static background as a black rectangle
display.setColor(Color.black);
display.fillRect(0,0,x,y);
display.setColor(Color.red);
try{Thread.sleep(500);} catch(Exception e) {} // Synch with system
} // drawingwindow
public static int depth(BinaryNode N) // find max depth of tree
{
if (N==null) return 0;
int l = depth(N.left);
int r = depth(N.right);
if (l>r) return l+1; else return r+1;
}
// internal vars used by drawtree routines:
private int bheight = 50; // branch height
private int yoff = 30; // static y-offset
// l is level, lb,rb are the bounds (position of left and right child)
private void drawnode(BinaryNode N,int l, int lb, int rb)
{
if (N==null) return;
try{Thread.sleep(100);} catch(Exception e) {} // slow down
display.setColor(Color.green);
display.fillOval(((lb+rb)/2)-10,yoff+(l*bheight),20,20);
display.setColor(Color.red);
display.drawString(N.element+"",((lb+rb)/2)-5,yoff+15+(l*bheight));
display.setColor(Color.blue); // draw branches
if (N.left!=null)
{
display.drawLine((lb+rb)/2,yoff+10+(l*bheight),((3*lb+rb)/4),yoff+(l*bheight+bheight));
drawnode(N.left,l+1,lb,(lb+rb)/2);
}
if (N.right!=null)
{
display.drawLine((lb+rb)/2,yoff+10+(l*bheight),((3*rb+lb)/4),yoff+(l*bheight+bheight));
drawnode(N.right,l+1,(lb+rb)/2,rb);
}
} // drawnode
public void drawtree(BinaryNode T)
{
if (T==null) return;
int d = depth(T);
bheight = (YDIM/d);
display.setColor(Color.white);
display.fillRect(0,0,XDIM,YDIM); // clear background
drawnode(T,0,0,XDIM);
}}
and another question
when i new a object from my tree class,i want to access that object in all my button codes so where i should define that or better to say , how i should define that object that can access in all my codes??
Upvotes: 0
Views: 3367
Reputation: 617
You should set default close operation to HIDE_ON_CLOSE
this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
As advised: Take note, that with DISPOSE_ON_CLOSE, you can still keep the program running if that is not the last JFrame that is open: (Taken from the javadocs) Note: When the last displayable window within the Java virtual machine (VM) is disposed of, the VM may terminate. See AWT Threading Issues for more information.
Upvotes: 2
Reputation: 6559
You can simply hide the JFrame.
this.hide();
Edit: For the above: Youssef G's answer is better.
For the 2nd part of the question. Create your tree class and pass the object around in your program so it is the same tree object. Don't create a new one.
For example:
Class A {
B b; //B object inside class A
Tree t; //Tree object inside class A
}
Class B {
Tree t; //Tree object inside class B
}
Now you have a tree object in both classes. You can create a new tree which is class b's tree while code is running in Class A. Then say this.t = b.t;
Hope this helps.
Upvotes: 0