我正在编写一个程序,它涉及使用Graphics类中的drawOval()
创建一个JFrame并在其中绘制一个圆圈。我遇到了一个问题,我试图在JFrame的中心创建一个点,然后绘制我的圆圈,这个圆圈是x和y坐标。到目前为止,这是我的代码:
import java.awt.Graphics;
import javax.swing.JFrame;
import java.awt.event.*;
import java.awt.geom.Point2D;
import java.awt.Point;
class MouseJFrameMotion extends JFrame implements MouseMotionListener{
int circleXcenter;
int circleYcenter;
int circleRadius = 50;
boolean show = false;
public MouseJFrameMotion(){
addMouseMotionListener(this);
}
public void paint(Graphics g){
super.paint(g);
if(show){
g.drawOval(circleXcenter,circleYcenter, circleRadius*2,circleRadius*2);
}
}
public void mouseDragged(MouseEvent e){
}
Point frameCenter = new Point((this.getWidth()/2), (this.getHeight()/2));
public void mouseMoved(MouseEvent e){
int xLocation = e.getX();
int yLocation = e.getY();
show = true;
circleXcenter = (int) frameCenter.getX();
circleYcenter = (int) frameCenter.getY();
repaint();
}
}
public class GrowingCircle {
public static void main(String[] args) {
MouseJFrameMotion myMouseJFrame = new MouseJFrameMotion();
myMouseJFrame.setSize(500, 500);
myMouseJFrame.setVisible(true);
}
}
正如您在main()
函数中看到的,我将JFrame的大小设置为500x500。但是,当绘制圆时,在调用Point frameCenter
后基于repaint()
的期望它们为(250,250)时,它的x和y坐标为(0,0)。我哪里错了?
答案 0 :(得分:2)
所以有两件事......
paint
的{{1}},JFrame
,JRootPane
以及用户与框架表面之间的其他组件,这些组件可能会干扰绘画。相反,请使用contentPane
并覆盖其JPanel
方法paintComponent
时,框架的大小为Point frameCenter = new Point((this.getWidth()/2), (this.getHeight()/2));
,您需要在绘制圆圈之前重新评估0x0
。执行此操作时,将取决于您希望更改的动态程度答案 1 :(得分:0)
我认为你需要repaint()和revalidate()方法
答案 2 :(得分:0)
在构建MouseJFrameMotion类时,定义了变量frameCenter并设置了width和height 0,它永远不会改变。因此,您可以做的是在绘图时计算框架中心。
public void mouseMoved(MouseEvent e) {
int xLocation = e.getX();
int yLocation = e.getY();
show = true;
Point frameCenter = new Point((this.getWidth() / 2), (this.getHeight() / 2));
circleXcenter = (int) frameCenter.getX();
circleYcenter = (int) frameCenter.getY();
repaint();
}