在Java中拖动行 我在屏幕中间创建了两条线,这是一个正符号,我只想在我点击它时拖动正符号,但是它只在我点击屏幕上的任何地方时才起作用,我希望当我点击它时,这个符号才会被拖动,而不是当我点击屏幕上其他地方的时候。我希望任何人都能帮助我,我可以做什么,使这项工作。这是下面的代码

在Java中拖动行 我在屏幕中间创建了两条线,这是一个正符号,我只想在我点击它时拖动正符号,但是它只在我点击屏幕上的任何地方时才起作用,我希望当我点击它时,这个符号才会被拖动,而不是当我点击屏幕上其他地方的时候。我希望任何人都能帮助我,我可以做什么,使这项工作。这是下面的代码,java,line,shapes,mouseclick-event,mousemotionlistener,Java,Line,Shapes,Mouseclick Event,Mousemotionlistener,您可以尝试使用图像而不是线条,并使用WASD。我的游戏就是这么用的。ourFrame.addKeyListener(新的KeyListener(){ ourFrame.addKeyListener(new KeyListener() { @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { System.out.println("Key pressed

您可以尝试使用图像而不是线条,并使用WASD。我的游戏就是这么用的。

ourFrame.addKeyListener(新的KeyListener(){
ourFrame.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}

@Override
public void keyPressed(KeyEvent e) {
    System.out.println("Key pressed code=" + e.getKeyCode() + ", char=" + e.getKeyChar());
    push = e.getKeyCode();

    if(push == 87){//w
         if(y > -9){//blocker
         picLabel.setBounds(x, y, 80, 40);
         y  = y + -10;
        // System.out.println("Cubie is going up at, " + x + "," + y);

    }}
    if(push == 65){//a
         if(x > -29){//blocker
         picLabel.setBounds(x, y, 80, 40);
         x  = x + -10;
        // System.out.println("Cubie is going left at, " + x + "," + y);
    }}
    if(push == 83){//s
         if(y < 421){//blocker
         picLabel.setBounds(x, y, 80, 40);
         y  = y + 10;
        // System.out.println("Cubie is going down at, " + x + "," + y);
    }}
    if(push == 68){//d
         if(x < 621){//blocker
         picLabel.setBounds(x, y, 80, 40);

        //System.out.println("Cubie is going right at, " + x + "," + y);
         x  = x + 10;
    }}
@凌驾 public void keyTyped(KeyEvent e){ } @凌驾 按下公共无效键(按键事件e){ System.out.println(“按键代码=“+e.getKeyCode()+”,char=“+e.getKeyChar()); push=e.getKeyCode(); 如果(推==87){//w 如果(y>-9){//blocker picLabel.setBounds(x,y,80,40); y=y+-10; //System.out.println(“Cubie在“+x+”,“+y”处上升); }} 如果(推==65){//a 如果(x>-29){//blocker picLabel.setBounds(x,y,80,40); x=x+-10; //System.out.println(“立方体在“+x+”,“+y”处向左移动); }} 如果(推==83){//s if(y<421){//阻断剂 picLabel.setBounds(x,y,80,40); y=y+10; //System.out.println(“立方体在“+x+”,“+y”处下降); }} 如果(推==68){//d if(x<621){//阻断剂 picLabel.setBounds(x,y,80,40); //System.out.println(“Cubie在“+x+”,“+y”处向右移动); x=x+10; }}
有几种方法可以做到这一点,但对我来说,我会尝试将这两条线组合成一个形状,这将允许你计算它们的粘合盒,然后进行简单的命中测试

例如

@Override
public void mouseDragged(MouseEvent e) {

    GeneralPath gp = new GeneralPath();
    gp.append(lineMn, false);
    gp.append(lineMp, false);

    Point p = e.getPoint();

    if (!gp.getBounds().contains(p)) {
        return;
    }

现在,请注意,“这个”实现不是很有效。相反,我会在早期将线条组合成单个形状,然后继续移动它。

但是如果我使用图像,它仍然是一样的,我只想在单击正号时拖动线条,而不是在面板上的任何其他位置
@Override
public void mouseDragged(MouseEvent e) {

    GeneralPath gp = new GeneralPath();
    gp.append(lineMn, false);
    gp.append(lineMp, false);

    Point p = e.getPoint();

    if (!gp.getBounds().contains(p)) {
        return;
    }