【发布时间】: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出现在mouseDragged和mouseReleased之前,因此在mousePressed中使用pointEnd完全没有意义 -
@HovercraftFullOfEels 谢谢。我不敢相信在我花了这么多时间看它之后我无法弄清楚这一点。但这并不能解决第二个问题。
-
public void mousePressed(MouseEvent e) { 未显示在您的问题中。