【问题标题】:Setting end point in mouseDragged and using it in mousePressed在 mouseDragged 中设置终点并在 mousePressed 中使用它
【发布时间】:2016-01-30 09:31:35
【问题描述】:

我正在创建一个程序,您可以在其中在面板上绘制(线条、椭圆形或矩形)并指定颜色、宽度、填充等。我有一个 JPanel 类,它实现了 MouseMotionListener 和 MouseListener。

这是 mouseDragged 方法的代码:

@Override
public void mouseDragged(MouseEvent e) {
   pointEnd = e.getPoint();
   repaint();
}

这是 mousePressed 方法的代码:

    public void mousePressed(MouseEvent e) { 

    Paint c = window.getFirst();
    second = window.getSecond();

    int shapeOption= window.getShapeSelect();
    //System.out.println(shapeOption);
    boolean fill = window.getFilled();

    BasicStroke s = new BasicStroke(window.getLineWidth()); //may not need new BasicStroke()

    pointStart = e.getPoint();

    Shape temp;


    switch (shapeOption) {
        case 0: 
           temp = new Line(pointStart, pointEnd, s, c);
        case 1: 
           temp = new Rectangles(pointStart, pointEnd, s, c, fill);
        default: 
           temp = new Oval(pointStart, pointEnd,s,c, fill);
    }

    shapes.add(temp);

}

这个程序有两个问题。 switch 语句没有按预期工作。即使 shapeOption 正确更新,它也只使用默认情况。对于新线和新矩形,我收到警告“从未使用分配的值”。

我遇到的另一个问题是该程序只画了一点点。我相信这是因为它在按下鼠标时创建了形状,此时 pointEnd 与 pointStart 相同。我怎样才能使它直到 mouseDragged 方法完成后才传递 pointEnd ?

我希望这是有道理的,任何帮助表示赞赏。

【问题讨论】:

  • 别忘了在你的switch语句中使用break;!否则,您将始终默认使用默认语句。以重复的形式结束问题。
  • 考虑提供一个runnable example 来证明您的问题。这不是代码转储,而是您正在做的事情的一个示例,它突出了您遇到的问题。这将导致更少的混乱和更好的响应
  • mousePressed 出现在 mouseDraggedmouseReleased 之前,因此在 mousePressed 中使用 pointEnd 完全没有意义
  • @HovercraftFullOfEels 谢谢。我不敢相信在我花了这么多时间看它之后我无法弄清楚这一点。但这并不能解决第二个问题。
  • public void mousePressed(MouseEvent e) { 未显示在您的问题中。

标签: java swing


【解决方案1】:

关于你的两个问题:

1) 你需要break; 在每个case语句的末尾;否则,控制权将通过您的所有 case 语句传递,temp 将始终设置为 Oval

2) mousePressed()mouseDragged() 之前被调用。您应该在mouseDragged() 中进行绘图以使其生效,或者在mouseReleased() 中仅在形状完成后进行绘图。您可能还需要一个标志来检查鼠标在mousePressed()mouseReleased() 之间移动的距离是否足够远,这样您就不会在非拖动的点击事件上绘制点。

【讨论】:

    猜你喜欢
    • 2012-08-21
    • 2019-12-03
    • 1970-01-01
    • 2013-03-02
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    相关资源
    最近更新 更多