我正在制作一个在点击的位置绘制圆圈的程序。
首次点击时,它会绘制一个圆圈,这个圆圈与我点击的地方并不完全相同。
但是,对于其他点击,它只是在另一个上绘制圆圈。因为我发现这是因为点击的坐标不会改变。
我的主要:
public static void main(String[] args)
{
JFrame frame = new JFrame();
//set window size
frame.setSize(1000, 1000);
//set the title
frame.setTitle("Oval Draw");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//add panel to frame and make it visible
MouseComponent component = new MouseComponent();
frame.add(component);
frame.setVisible(true);
}
和MouseComponent类:
public class MouseComponent extends JPanel implements MouseListener
{
boolean drawPoint = true;
boolean drawLine = false;
boolean drawOval = false;
public MouseComponent()
{
super();
pointX = 0;
pointY = 0;
lineX = 0;
lineY = 0;
addMouseListener(this);
}
int pointX, pointY, lineX, lineY;
int[] ArrayX,ArrayY;
@Override
public void paintComponent(Graphics g)
{
for(int i=0; i<10; i++)
{
super.paintComponent(g);
if(drawLine)
{
int red = (int) (Math.random() * 255);
int green = (int) (Math.random() * 255);
int blue = (int) (Math.random() * 255);
Color startrandomColor = new Color(red, green, blue);
red = (int) (Math.random() * 255);
green = (int) (Math.random() * 255);
blue = (int) (Math.random() * 255);
Color endrandomColor = new Color(red, green, blue);
Graphics2D g2d = (Graphics2D) g;
// this.addMouseListener(this);
GradientPaint gradient = new GradientPaint(70, 70, startrandomColor,
150, 150, endrandomColor);
g2d.setPaint(gradient);
g2d.translate( lineX, lineY);
g2d.fillOval(70, 70, 100, 100);
System.out.print(lineX);
System.out.print(" ");
System.out.print(lineY);
System.out.print(" ");
System.out.print(pointX);
System.out.print(" ");
System.out.print(pointY);
System.out.print(" ");
// repaint();
}
else if(drawPoint)
{
// g.drawOval(pointX-5,pointY-5,10,10);
}
}
}
public void mouseClicked(MouseEvent mouse)
{
if(!drawPoint)
{
pointX = mouse.getX();
pointY = mouse.getY();
drawPoint = true;
}
else if(!drawLine)
{
lineX = mouse.getX();
lineY = mouse.getY();
drawLine = true;
}
repaint();
}
public void mouseEntered(MouseEvent mouse){ }
public void mouseExited(MouseEvent mouse){ }
public void mousePressed(MouseEvent mouse){ }
public void mouseReleased(MouseEvent mouse){ }
}
答案 0 :(得分:2)
这里:
if(!drawPoint)
{
pointX = mouse.getX();
pointY = mouse.getY();
drawPoint = true;
}
根本没有太多意义。您将drawPoint初始化为true
...因此您将从不输入if块并收集点击坐标。
除此之外:当你研究另一种方法时 - 绘制点的代码是注释掉。
建议:退一步;不要试图同时做5件事。将代码写入
让 工作。忘记绘制线条,形状,现在 。
当你有一个除了点击+绘制圆圈之外什么都不做的课程;然后创建一个新类,您可以在其中添加更多功能。你真实的&#34;现在的问题是你开始研究各种功能;并且你试图整合&#34;他们进入一个单独的课程让你感到困惑,并不奇怪......不工作!
长话短说:忘记你现在代码中的那种奇怪的逻辑,以及#34;切换&#34;在绘图点和线之间。画点。然后,当它工作时...添加一些单选按钮;或下拉菜单,并使用 来控制是否要绘制线条或点。不要做那&#34;隐含&#34;通过在事件处理程序代码中切换布尔值!
答案 1 :(得分:1)
boolean drawPoint = true;
boolean drawLine = false;
导致它第一次打印。之后,两者都设置为true,因此不会改变坐标。