如何在Java中创建可拖动对象?

时间:2016-05-19 23:23:57

标签: java jquery object button draggable

我正在尝试为会计学生创建一个游戏,让他们更多地了解资产,负债和所有者的权益。我已经为程序创建了图形,但遗憾的是无法弄清楚如何将词汇表单词编码成可以拖动到每个帐户列的可移动对象。我希望能够将单词拖到每个部分,然后使用复选标记按钮检查答案以查看帐户是否全部正确。我很感激我努力的任何帮助,因为我尝试过并尝试创建这个程序。我的按钮被设置为默认位置并且无法更改它们所在的位置时,我也遇到了问题。我将非常感谢任何问题的帮助,并将代码保留在下面,以便更容易理解问题。

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



 }

1 个答案:

答案 0 :(得分:0)

编辑:请参阅此答案以下的评论。我在这个答案中推荐这种方法:https://stackoverflow.com/a/11814384/1270000

原始答案: 以下是一些可能有用的逻辑:

1)将按钮转换为对象,以便每个对象都可以动态更新,并且只在paint方法中引用这些对象。在下面的代码中,我称之为myGraphicObject

2)因为您的按钮现在是对象,所以您可以为它们添加一些值以跟踪按钮/图形在屏幕上的位置,因此当按下鼠标时您知道要移动的图形。

3)为鼠标拖动事件创建一个监听器。然后找出是否选择了任何按钮/图形然后修改该按钮对象并设置一个新位置,例如,这将适用于myGraphicObjectAssetsBox.updateLocation(point)下面的代码,其中point是从拖动鼠标开始计算的新位置。 / p>

4)现在,从监听器触发您的图形glassPane的重绘,然后您的paint方法中的代码将自动在正确的位置绘制您的对象。像myGlassPane.repaint();

这样的东西

示例绘画方法

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

注意:代码只是粗略地直接输入到SO中,所以它可能不会编译,声明也是如此。