我创建了一个对象的Arraylist(Circles)。我添加了一个鼠标点击事件,所以一旦我点击面板,一个圆圈将被淹没并存储在arraylist中。我被困住了,无法想到绕过我的代码...我会很感激一些可以帮助我解决问题的提示。
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
public class Circle extends JFrame
{
private JPanel panel;
private ArrayList <Circle> circle;
public static void main(String[]args)
{
setTitle("Drawing Circles");
// Set the size of the window.
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
// Specify an action for the close button.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// set the Frame's layout
setLayout(new BorderLayout());
// Add the panels to the frame's content pane.
add(panel, BorderLayout.CENTER);
// Display the window.
setVisible(true);
circle = new ArrayList<Circle>();
}
public Circle()
{
panel.addMouseListener(new ClickingLitener());
}
private class ClickingLitener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{
circle.add(new Circle());
// somehow I need to call panel.paintComponent ... right ?
}
}
}
答案 0 :(得分:1)
您的Circle
类扩展了JFrame。您无法在JPanel上添加或绘制JFrame,因此您的基本方法存在缺陷。
如果要进行自定义绘制以在面板上绘制Circle
,则需要存储有关要绘制的Circle
的信息。然后在面板的paintComponent()方法中迭代ArrayList并绘制所有圆。将新Circle添加到ArrayList时,只需调用面板上的repaint()即可。
查看Custom Painting Approaches以了解此方法的工作示例。代码添加&#34;矩形&#34;到面板,但你应该能够轻松地更改代码以添加圆圈。