0

ボタンを押すと、そのアプリケーションでJavaデスクトップアプリケーションを設計しました。ツリーを描画する別のJframeが表示されますが、Jframeを閉じると操作全体が閉じますが、そのJfarmeだけを閉じたいのですが、どうすればよいですか? 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);
}}

そして別の質問

ツリークラスから新しいオブジェクトを作成するとき、すべてのボタンコードでそのオブジェクトにアクセスしたいので、どこでそれを定義する必要があるか、またはより適切に言うと、すべてのコードでアクセスできるオブジェクトをどのように定義する必要がありますか??

4

2 に答える 2

2

デフォルトのクローズ操作を HIDE_ON_CLOSE に設定する必要があります

  this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

アドバイスどおり: DISPOSE_ON_CLOSE を使用すると、開いている最後の JFrame でない場合でも、プログラムを実行し続けることができることに注意してください: (javadocs から取得) 注: Java 仮想マシン (VM) 内の最後の表示可能なウィンドウがVM が終了する可能性があります。詳細については、AWT スレッドの問題を参照してください。

于 2012-04-13T19:09:54.507 に答える
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 = bt; とします。

お役に立てれば。

于 2012-04-13T19:04:51.980 に答える