Java-repaint()可选
这是我在鼠标光标附近绘制椭圆的简单代码。每次单击“框架”都会重新绘制,一次只能绘制一个椭圆。我想知道如何使单击后绘制的每个椭圆保持在框架上。感谢您的建议Java-repaint()可选,java,swing,paintcomponent,repaint,Java,Swing,Paintcomponent,Repaint,这是我在鼠标光标附近绘制椭圆的简单代码。每次单击“框架”都会重新绘制,一次只能绘制一个椭圆。我想知道如何使单击后绘制的每个椭圆保持在框架上。感谢您的建议 import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Buffer extends JPanel implements MouseListener{
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class Buffer extends JPanel implements MouseListener{
public static JFrame frame;
public static boolean check;
public void paintComponent(Graphics g){
super.paintComponent(g);
if(check==true){
g.drawOval((int)MouseInfo.getPointerInfo().getLocation().getX(), (int)MouseInfo.getPointerInfo().getLocation().getY(), 10, 10);
}
}
public static void main(String args[]){
Buffer x=new Buffer();
x.setBackground(Color.cyan);
frame=new JFrame();
frame.setSize(500,500);
frame.addMouseListener(x);
frame.add(x);
frame.setVisible(true);
}
public void mouseClicked(MouseEvent e){
check=true;
repaint();
}
public void mouseEntered(MouseEvent arg0){}
public void mouseExited(MouseEvent arg0){}
public void mousePressed(MouseEvent arg0){}
public void mouseReleased(MouseEvent arg0){}
}
制作一个代表椭圆的对象的
ArrayList
。在paintComponent
中,在列表中绘制每个椭圆形。在鼠标侦听器中,将椭圆添加到列表中。下面是一个例子:
public class Buffer extends JPanel implements MouseListener {
...
private List<Ellipse2D> ovals = new ArrayList<Ellipse2D>();
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (Ellipse2D oval : ovals)
g2d.draw(oval);
}
public void mouseClicked(MouseEvent e) {
ovals.add(new Ellipse2D.Double(e.getX(), e.getY(), 10, 10);
repaint();
}
}
公共类缓冲区扩展JPanel实现MouseListener{
...
private List ovals=new ArrayList();
公共组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g;
用于(椭圆E2D椭圆形:椭圆形)
g2d.绘制(椭圆形);
}
公共无效mouseClicked(MouseEvent e){
添加(新的Ellipse2D.Double(e.getX(),e.getY(),10,10);
重新油漆();
}
}
制作一个代表椭圆的对象的阵列列表
。在paintComponent
中,在列表中绘制每个椭圆。在鼠标侦听器中,向列表中添加一个椭圆。以下是一个示例:
public class Buffer extends JPanel implements MouseListener {
...
private List<Ellipse2D> ovals = new ArrayList<Ellipse2D>();
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
for (Ellipse2D oval : ovals)
g2d.draw(oval);
}
public void mouseClicked(MouseEvent e) {
ovals.add(new Ellipse2D.Double(e.getX(), e.getY(), 10, 10);
repaint();
}
}
公共类缓冲区扩展JPanel实现MouseListener{
...
private List ovals=new ArrayList();
公共组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g;
用于(椭圆E2D椭圆形:椭圆形)
g2d.绘制(椭圆形);
}
公共无效mouseClicked(MouseEvent e){
添加(新的Ellipse2D.Double(e.getX(),e.getY(),10,10);
重新油漆();
}
}
或者将它们存储在类似于列表的结构中,在绘制时迭代列表,绘制每个列表,或者将每个列表绘制到缓冲区图像
并调用重新绘制()
在显示它的标签上。还要注意,源代码中只有一行空白就足够了。可以将它们存储在类似列表的结构中,然后在绘制时迭代列表,绘制每个列表,或者将每个列表绘制到缓冲图像中,然后调用重新绘制()
在显示它的标签上。还要注意,源代码中的一行空白总是足够的。