マウスをクリックしたときに楕円をJPanelに描画しようとしています。私のコードはpaintComponentを呼び出さないので、JPanelでは何も起こりません。どの部分が欠けているの?JPanelで楕円を描くことができません
public class Main extends JFrame implements MouseListener{
JPanel thePanel = new JPanel(){
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.red);
for (Circle c : circles){
g.fillOval(c.x, c.y, c.diameter, c.diameter);
System.out.println(c.x + "a");
}
}
};
JFrame frame=new JFrame();
int x,y;
ArrayList<Circle >circles = new ArrayList<Circle>();
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Main();
}
});
}
public Main(){
frame.setSize(512,512);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addMouseListener(this);
frame.add(thePanel);
frame.setVisible(true);
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(e.getX());
Circle c = new Circle();
c.x=e.getX();
c.y=e.getY();
c.diameter=10;
circles.add(c);
repaint();
}
円クラス
class Circle
{
public int x, y, diameter;
}
私はゲッターとセッターを使用していませんでしたが、私はそれが問題だとは思いません。
を幅と高さをドラッグ。 'repaint()'の代わりに 'thePanel.repaint()'を試してみてください。 – khelwood
私はこの質問がここで尋ねられた同じ問題の**重複**だと思う:http://stackoverflow.com/questions/35299786/draw-circle-on-jpanel-after-mouse-click/35300018 – onlyhuman
'public class MainはJFrameを拡張しています.'' 1) 'Main'は非常に意味のない(したがって役に立たない)名前です。それを意味のあるものにする。 'OvalGUI'のようなものはもっと説明的です。 2)「JFrame」を拡張する必要はありません:A)GUIがGUIを作成します。 B) 'JFrame'クラスのメソッドはオーバーライドされません。 –