Java 单击鼠标后绘制椭圆形
我想在面板中单击鼠标时绘制一个椭圆形。我点击按钮后可以画图。但是出现了一个问题:按钮的副本绘制在面板的左上角 这是我的代码:Java 单击鼠标后绘制椭圆形,java,swing,graphics,paintcomponent,Java,Swing,Graphics,Paintcomponent,我想在面板中单击鼠标时绘制一个椭圆形。我点击按钮后可以画图。但是出现了一个问题:按钮的副本绘制在面板的左上角 这是我的代码: public class PaintPanel extends JPanel implements MouseListener, MouseMotionListener{ private boolean draw = false; private JButton button; private Point myPoint
public class PaintPanel extends JPanel implements MouseListener, MouseMotionListener{
private boolean draw = false;
private JButton button;
private Point myPoint;
public PaintPanel(){
this.setSize(800,600);
button = new JButton("Allow draw");
button.setSize(30,30);
this.add(button);
this.addMouseListener(this);
this.addMouseMotionListener(this);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
draw = true;
}
});
}
@Override
public void paintComponent(Graphics g){
g.setFont(new Font("Arial",Font.BOLD,24));
g.setColor(Color.BLUE);
if(draw){
g.drawOval(myPoint.x-10, myPoint.y-10, 20, 20);
}
}
@Override
public void mousePressed(MouseEvent e) {
if(draw){
myPoint = e.getPoint();
repaint();
}
}
public static void main(String[] agrs){
JFrame frame = new JFrame("Painting on panel");
frame.add(new PaintPanel());
frame.setVisible(true);
frame.setSize(800,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
}
}
你把油漆链弄断了 在进行任何自定义绘制之前,添加
super.paintComponent(g)
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setFont(new Font("Arial",Font.BOLD,24));
g.setColor(Color.BLUE);
if(draw){
g.drawOval(myPoint.x-10, myPoint.y-10, 20, 20);
}
}
图形
是一种共享资源。它提供给在给定绘制周期内绘制的所有内容,这意味着,除非您首先清除它,否则它将包含在您之前已经绘制的其他内容
paintComponent
的工作之一是为绘制准备Graphics
上下文,但要清除它(用组件背景色填充)
仔细观察,了解更多细节你打破了油漆链 在进行任何自定义绘制之前,添加
super.paintComponent(g)
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setFont(new Font("Arial",Font.BOLD,24));
g.setColor(Color.BLUE);
if(draw){
g.drawOval(myPoint.x-10, myPoint.y-10, 20, 20);
}
}
图形
是一种共享资源。它提供给在给定绘制周期内绘制的所有内容,这意味着,除非您首先清除它,否则它将包含在您之前已经绘制的其他内容
paintComponent
的工作之一是为绘制准备Graphics
上下文,但要清除它(用组件背景色填充)
请仔细查看和了解更多详细信息
我想画画。普雷维奥斯椭圆不会消失 有关进行增量绘制的两种常用方法,请参见:
我想画画。普雷维奥斯椭圆不会消失 有关进行增量绘制的两种常用方法,请参见:
我想画画。previos oval不会将它们添加到某种
列表中,并在调用paintComponent
时重新绘制它们。在Swing中绘制是一个破坏性的过程,这就是API的工作方式,您需要在其中工作。“我想绘制append.previos oval不会消失”@HjepJga_94关于程序员关于列表的观点,请参见
@HjepJga_94,因为我想画一个附加。previos oval不会将它们添加到某种列表中,并在调用paintComponent
时重新绘制它们。在Swing中绘制是一个破坏性的过程,这就是API的工作方式,您需要在其中工作。“我想绘制append.previos oval不会消失”@HjepJga_94关于程序员关于Swing应用程序的列表的观点,请参见。有关更多详细信息,请参阅。Swing应用程序应该从EDT运行。有关更多详细信息,请参阅。