【发布时间】:2012-12-14 20:06:45
【问题描述】:
java draw line as the mouse is moved 中已经提到了我的问题,但是,正如之前提出这个问题的程序员所说,我在本书中还没有深入到涵盖 JPanel、JFrames 和 Points 的程度。
回答这个问题肯定会帮助大多数初学者更好地理解图形类和绘图,这是一个通常复杂的过程,尤其是对于初学者。
根据我使用的文本(因为我正在自学Java),这是如何使用Java画线的示例:
/*
* LineTest
* Demonstrates drawing lines
*/
import java.awt.*;
public class LineTest extends Canvas {
public LineTest() {
super();
setSize(300, 200);
setBackground(Color.white);
}
public static void main(String args[]) {
LineTest lt = new LineTest();
GUIFrame frame = new GUIFrame("Line Test");
frame.add(lt);
frame.pack();
frame.setVisible(true);
}
public void paint(Graphics g) {
g.drawLine(10, 10, 50, 100);
g.setColor(Color.blue);
g.drawLine(60, 110, 275, 50);
g.setColor(Color.red);
g.drawLine(50, 50, 300, 200);
}
}
规格为:
创建一个应用程序,允许您通过单击初始 点并将鼠标拖动到第二个点。该应用程序应 重新绘制,以便您可以看到线条的大小和位置随着您的变化而变化 正在拖动鼠标。释放鼠标按钮时,该行是 绘制。
如您所见,运行此程序不会由用户创建任何绘图。我相信由于第 21 行遇到此错误:g.drawLine(x, y, x2, y2); 不正确,因为这是定义线条绘制的语句。
非常感谢任何帮助。预先感谢您在此问题上的所有时间和合作。
我回答问题的代码是:
import java.awt.*;
import java.awt.event.*;
public class LineDrawer extends Canvas
implements MouseListener, MouseMotionListener {
int x, y, x2, y2;
public LineDrawer() {
super();
setSize(300, 200);
setBackground(Color.white);
}
public void mouseClicked(MouseEvent me) {
int x = me.getX();
int y = me.getY();
int x2 = me.getX();
int y2 = me.getY();
}
public void paint(Graphics g) {
g.drawLine(x, y, x2, y2);
g.setColor(Color.blue);
}
public void mousePressed(MouseEvent me) {
repaint();
}
public void mouseDragged(MouseEvent me) {
}
public void mouseExited(MouseEvent me) {
}
public void mouseEntered(MouseEvent me) {
}
public void mouseReleased(MouseEvent me) {
}
public void mouseMoved(MouseEvent me) {
}
public static void main(String args[]) {
LineDrawer ld = new LineDrawer();
GUIFrame frame = new GUIFrame("Line Drawer");
frame.add(ld);
frame.pack();
frame.setVisible(true);
}
}
P.S.:我一直犹豫寻求帮助,因为我担心其他程序员会用我还没有学过的方法来回答。
【问题讨论】:
-
“我一直犹豫是否要寻求帮助,因为我担心其他程序员会用我还没有学过的方法来回答。”这也是我的原因之一认为 SO 很棒 - 总是有新事物!如果你不想这样,也许你来错地方了。
-
1)
public class LineDrawer extends Canvas这是第三个千年。使用 Swing(JPanel并覆盖paintComponent(Graphics))。 2) 对代码块使用一致且符合逻辑的缩进。代码的缩进是为了帮助人们理解程序流程。 3) 组件可能会覆盖首选大小,但不应setSize(300, 200);。 -
@AndrewThompson
JPanel有一个缺点。它不支持三重缓冲(虽然不需要) -
"问题是:" 不,这是一个规范,而不是一个问题。您的具体问题是什么是?
标签: java graphics drawing awt mouseevent