2012-04-13 30 views
0

私はボタンを押したときに 別のJFrameはそれが木 を描く示され、そのアプリケーションのJavaデスクトップアプリケーション を設計しますが、私は閉じたときのJFrame全体の動作が 近いですが、私は唯一のJfarmeは、私が何をすべきことを閉じるようにしたいですか?ここ はJFrameのコードです:メインプログラムを閉じずにjframeを閉じるには?

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); 
}} 

と別の質問私は私の木クラスからオブジェクトを新しい

、私はすべての私のボタンのコードで、そのオブジェクトにアクセスしたい ので、私はそれを定義する必要がありますどこかどのようにすべてのコードでアクセスできるオブジェクトを定義する必要がありますか?

+0

最初にJFrameを表示するコードを表示できますか? – twain249

+0

1)* "別のJフレームが表示されています" * [複数のJFramesの使用、良い/悪い練習ですか?](http://stackoverflow.com/a/9554657/418556) 2)シフトキーを見つけて、それはすべての文章の始めに、Iという単語とJFrameのようなクラス名のために。その混乱は試して読むのに苦痛です。 3)そのコードは問題とは関係がないように見えました。 4)* "と別の質問" *それは別の質問の話題です。 2つの質問を1つに詰め込もうとしないでください。 –

+0

thxそれは今働いています – Oli

答えて

0

単純にJFrameを非表示にすることができます。

this.hide(); 

編集:上記の場合:Youssef Gの回答が優れています。

質問の2番目の部分です。ツリークラスを作成し、プログラム内でオブジェクトを渡して、同じツリーオブジェクトにします。新しいものを作成しないでください。例えば

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 
} 

は今、あなたは、両方のクラスのツリーオブジェクトを持っています。コードがクラスAで実行されているときにクラスbのツリーである新しいツリーを作成することができます。次にthis.t = b.t;

これが役に立ちます。

+0

私はこのチェスのプログラムをJavaで書いています、そして、私はメインのアプリケーションビューの内部とAIEngineクラスの中にボードオブジェクトを作成します。あなたはツリーオブジェクトのために同様のことをすることができます。私のコードは次のとおりです。http://www.kanersan.com/myfiles/ChessSource.zip – c0d3Junk13

+0

また、アプリケーションのいくつかのビュー/フレームをどのように処理しているかを見ることもできます。 – c0d3Junk13

+0

完全なゲームはここにあります:http://www.kanersan.com/myfiles/Chess.zip – c0d3Junk13

2

あなたがお勧めのよう

this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 

をHIDE_ON_CLOSEするデフォルトクローズ操作を設定する必要があります。 それが開いている最後のJFrameでない場合DISPOSE_ON_CLOSEで、あなたはまだ実行中のプログラムを保つことができることを、注意してください: ( javadocsから取得) 注:Java仮想マシン(VM)内の最後の表示可能なウィンドウが破棄されると、VMが終了することがあります。詳細については、「AWT Threading Issues」を参照してください。

+0

あなたはあなたの答えにそのコメントを編集し、コメントを削除する必要があります。私は複数のフレーム(私のコメントではリンクを追う)に対してアドバイスをしますが、技術的に正解であれば+1します。 –

+0

^私はあなたに同意しますが、以前の回答者がDISPOSE_ON_CLOSEを掲示して以来、代わりにそれをリストしたかっただけです。 –

+0

* "以前の回答" *はい、私はそれを見ました。それは所有者によって削除された幸運だった。それをクリアしていただきありがとうございます。:) –

関連する問題