2016-05-19 7 views
0

は、私は彼らが資産、負債、および所有者の株式についての詳細を学ぶことができます会計学生のためのゲームを作成しようとしています。私はプログラムのためのグラフィックスを作成しましたが、悲しいことに各Accountコラムにドラッグできる可動オブジェクトに語彙をコード化する方法を理解できません。単語を各セクションにドラッグして、チェックマークボタンを使用して回答が正しいかどうかを確認することができます。私はこのプログラムを作ろうと努力してきたので、私の努力の中でどんな助けにも感謝します。私はまた、私のボタンがデフォルトの場所に設定されていて、どこにいるのかを変更できないという問題を抱えていました。どちらの問題についても助けていただければ幸いです。下にコードを残しておくと、問題をより簡単に理解できるようになります。Javaでドラッグ可能オブジェクトを作成するにはどうすればよいですか?

import java.awt.*; 
import java.applet.*; 
import javax.swing.*; 


public class FinalProjectst extends Applet 
{ 
private int xCoord, yCoord; 
private boolean mouseDown; 

public void init() { 
    setSize(1000,650); 
    repaint(); 

    //Check Button\\ 
    Button b = new Button(); 
    b.setBackground(Color.green); 
    b.setBounds(475,525,50,50); 
    b.setSize(50,50); 
    b.setFont(new Font("TimesRoman",Font.BOLD,40)); 
    b.setLabel("\u2713"); 
    add(b); 

    //Reset Button\\ 
    Button c = new Button(); 
    c.setBackground(Color.red); 
    c.setBounds(475,600,50,50); 
    c.setSize(50,50); 
    c.setFont(new Font("TimesRoman",Font.BOLD,40)); 
    c.setLabel("X"); 
    add(c); 
} 

public void paint(Graphics g) 
{ 
    //Assets Box\\ 
    g.setColor(Color.green); 
    g.fillRect(0,0,333,500); 
    g.setColor(Color.white); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,54)); 
    g.drawString("Assets",90,60); 

    //Liabilities Box\\ 
    g.setColor(Color.red); 
    g.fillRect(333,0,667,500); 
    g.setColor(Color.white); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,54)); 
    g.drawString("Liabilities",380,60); 

    //Owner's Equity Box\\ 
    g.setColor(Color.blue); 
    g.fillRect(668,0,338,500); 
    g.setColor(Color.white); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,54)); 
    g.drawString("Owner's Equity",670,60);  

    //Word Bank Box\\ 
    g.setColor(Color.black); 
    g.fillRect(0,500,1005,175); 

    //T-Chart Boundaries\\ 
    g.setColor(Color.black); 
    g.drawLine(0,75,1005,75); 
    g.drawLine(333,0,333,500); 
    g.drawLine(667,0,667,500); 
    g.drawLine(1005,0,1005,674); 
    g.drawLine(0,650,1005,650); 
    g.drawLine(0,500,1005,600); 

    //Rent Expense Box\\ 
    g.setColor(Color.white); 
    g.fillRect(25,525,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Rent Expense",30,555); 

    //Retained Earnings\\ 
    g.setColor(Color.white); 
    g.fillRect(25,600,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Retained",50,620); 
    g.drawString("Earnings",50,645); 

    //Common Stock\\ 
    g.setColor(Color.white); 
    g.fillRect(175,525,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Common",195,545); 
    g.drawString("Stock",210,570); 

    //Accounts Receivable\\ 
    g.setColor(Color.white); 
    g.fillRect(175,600,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Accounts",195,620); 
    g.drawString("Receivable",190,645); 

    //Dividends\\ 
    g.setColor(Color.white); 
    g.fillRect(325,525,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Dividends",343,558); 

    //Drawing\\ 
    g.setColor(Color.white); 
    g.fillRect(325,600,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Drawing",350,633); 

    //Cash\\ 
    g.setColor(Color.white); 
    g.fillRect(550,525,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Cash",590,558); 

    //Miscellaneous Expense\\ 
    g.setColor(Color.white); 
    g.fillRect(550,600,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Miscellaneous",550,620); 
    g.drawString("Expense",575,642); 

    //Tax Payable\\ 
    g.setColor(Color.white); 
    g.fillRect(700,525,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Tax",740,545); 
    g.drawString("Payable",725,565);      

    //Equipment\\ 
    g.setColor(Color.white); 
    g.fillRect(700,600,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Equipment",715,632); 

    //Prepaid Insurance\\ 
    g.setColor(Color.white); 
    g.fillRect(850,525,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Prepaid",877,545); 
    g.drawString("Insurance",870,565); 

    //Accounts Payable\\ 
    g.setColor(Color.white); 
    g.fillRect(850,600,125,50); 
    g.setColor(Color.black); 
    g.setFont(new Font("TimesRoman",Font.PLAIN,22)); 
    g.drawString("Accounts",870,620); 
    g.drawString("Payable",878,642); 

} 

public boolean mouseDown(Event e, int x, int y) 
{ 
    xCoord = x; 
    yCoord = y; 
    if((xCoord >= 475 && xCoord <= 525)&&(yCoord >=600 && yCoord <= 650)) { 
    mouseDown = true; 
    } 
    //repaint(); 
    mouseDown = false; 
    return true; 
} 



} 

答えて

0

編集:この回答の下のコメントを参照してください。私はこの答えにアプローチをお勧めします:https://stackoverflow.com/a/11814384/1270000

オリジナルの答え:ここで が役立つかもしれないいくつかのロジックです:それぞれがその場で更新され、参照のみを置くことができるように、

1)は、オブジェクトにあなたのボタンをオンにしますあなたのペイント方法のそれらのオブジェクトに。以下のコードでは、私はそれをmyGraphicObjectと呼びます。

2)あなたのボタンがあるので、あなたは、マウスボタンが押されたときに、あなたが移動するためにどのようなグラフィックを知って、あなたのボタン/グラフィックが画面上にある場所を追跡するために、それらにいくつかの値を追加することができますオブジェクト。

3)マウスドラッグイベントのリスナーを作成します。次に、あなたのボタン/グラフィックスのいずれかどうかを調べるがそのボタンオブジェクトを変更し、新しい場所を設定し、その後に選択され、例えばこれはポイントが新しい位置はマウスから働いているmyGraphicObjectAssetsBox.updateLocation(point)以下のコードで動作しますドラッグ。

4)今、リスナーからのglassPaneは、その後、あなたのpaintメソッド内のコードが自動的に正しい場所にオブジェクトを描画します、あなたのグラフィックスの再描画をトリガーします。

public class myGraphicObject 
{ 
    //some values here 
    Point location; 
    int width, height; 
    Color colorBackground; 
    Color colorText; 
    Font font; 
    String text; 
    //etc etc 

    //update location so paint method is automatic 
    public void updateLocation(Point newLocation) 
    { 
     location = newLocation; 
    } 

    //called form your paint method 
    public void update(Graphics g) 
    { 
     g.setColor(colorBackground); 
     g.fillRect(location.x,location.y,width,height); 
     g.setColor(colorText); 
     g.setFont(font); 
     g.drawString(text); 
    } 
} 

注:コードはちょうどおよそSOに直接入力されるので、それはproberbly文句を言わないコンパイルmyGlassPane.repaint();

例の塗装方法

public void paint(Graphics g) 
{ 
    //pass your graphics to your object 
    myGraphicObjectAssetsBox.update(g); 
    myGraphicObjectLiabilitiesBox.update(g); 
    myGraphicObjectOwnersEquityBox.update(g); 
} 

そして、あなたのmyGraphicObjectクラスは、このようなものかもしれないような何か宣言はiffyです。

+0

ボタンをどのように使用しようとしているのか気づいたので、この回答は半古くなりました。ただし、swingコンポーネントを使用するのではなく、完全にグラフィカルなアプローチを使用する場合は、このロジックを使用できます。 Swingコンポーネントを使用しての問題は、彼らがレイアウトマネージャに従うと、あなたは、グラフィックオーバーレイで作業するとき、あなたがそれでやりたいものは何でもできるのに対し、多くの場合、お互いの上に座っていないということです。移動ボタンについては、こちらをご覧ください:http://stackoverflow.com/a/11814384/1270000 – sorifiend

関連する問題