2016-05-19 39 views
0

我正在爲會計學生創建一個遊戲,讓他們瞭解更多關於資產,負債和所有者權益的信息。我已經爲程序創建了圖形,但遺憾的是無法弄清楚如何將詞彙單詞編碼爲可拖動到每個帳戶列的可移動對象。我希望能夠將單詞拖到每個部分,然後使用複選標記按鈕檢查答案以查看帳戶是否全部正確。我會很感激任何幫助,因爲我嘗試過創建這個程序。我的按鈕被設置爲默認位置,並且無法更改其位於的位置,但我也遇到了問題。我很感謝任何幫助,並將代碼放在下面,這樣可以更容易地理解問題。如何在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,然後您的繪圖方法中的代碼將自動繪製您的對象在正確的位置。像myGlassPane.repaint();

例paint方法

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

而且你myGraphicObject類的東西可能是這樣的:

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

注:代碼只是粗略地直接鍵入如此,所以它proberbly不會編譯和聲明是如果。

+0

我剛剛注意到你是如何嘗試使用按鈕,所以這個答案是半過時的。但是如果你想使用完全圖形化的方法而不是使用擺動組件,你仍然可以使用這個邏輯。使用swing組件的問題是它們服從佈局管理器,並且通常不會坐在彼此之上,而當您使用圖形疊加層時,您可以執行任何想要的操作。移動按鈕請參閱:http://stackoverflow.com/a/11814384/1270000 – sorifiend