マウスをクリックするたびに白い背景にラウンドを描画するこのコードを書きました。背景に画像を追加した唯一の問題であり、マウスのクリック時にラウンドを追加したいのですが、そうしません。これは以下のコードです。助けてください
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Rectangle2D;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Frame {
JFrame frame;
MyPanel p;
Timer t;
Icon icon;
//contructor
public Frame() {
frame = new JFrame("Painting");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initComponents();
frame.add(p);
frame.pack();
frame.setVisible(true);
t.start();
}
private void initComponents() {
final ActionListener action = new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
p.repaint();
}
};
t = new Timer(50, action);
p = new MyPanel();
p.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
p.addEntity(e.getX(), e.getY(), 10, 10, Color.BLACK);
System.out.println("clicked");
}
});
icon = new ImageIcon("flower.gif");
JLabel label = new JLabel(icon);
JScrollPane scrollPane = new JScrollPane(label);
p.add(scrollPane, BorderLayout.WEST);
p.setBackground(Color.WHITE);
}
}
class MyPanel extends JPanel {
int width = 300, height = 300;
ArrayList<MyCircle> entities = new ArrayList<MyCircle>();
void addEntity(int x, int y, int w, int h, Color c) {
entities.add(new MyCircle(x, y, w, h, c));
}
@Override
protected void paintComponent(Graphics grphcs) {
super.paintComponent(grphcs);
Graphics2D g2d = (Graphics2D) grphcs;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
for (MyCircle entity : entities) {
g2d.setColor(entity.getColor());
g2d.fillOval((int) entity.x, (int) entity.y, (int) entity.width, (int) entity.height);
}
}
//frame dimesion
@Override
public Dimension getPreferredSize() {
return new Dimension(width, height);
}
}
//create the circle
class MyCircle extends Rectangle2D.Double {
Color color;
public MyCircle(double x, double y, double w, double h, Color c) {
super(x, y, w, h);
color = c;
}
public void setColor(Color color) {
this.color = color;
}
public Color getColor() {
return color;
}
}