我是Java和Swing的新手,这也是我的第一篇文章,如果它没有多大意义,那就很抱歉。
我要做的是当我点击JPanel时,我希望它在我点击的位置添加一个圆圈。目前,所有似乎都发生的事情就是当我点击时,我要添加的JPanel中会出现一个小的灰色方块,但我似乎找不到任何方法让它画成一个圆圈。
我有一个扩展JPanel的类叫做“Ball”,这是我点击时添加的内容。 目前,我并不担心它在正确的位置,只是为了正确地抽球。 以下是我的“Ball”课程的代码:
package paintsliders;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
class Ball extends JPanel{
private int x,y,w,h;
//I will use this constructor to put the ball in the correct location later.
Ball(){
/*this.w = 100;
this.h = 100;
this.x = 200;
this.y = 200;*/
}
//draw the ball
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(200,200,10,10);
g.setColor(Color.RED);
}
}
我可以猜测它与paintComponent方法有关,但我看到的任何地方似乎都找不到解决方案。
任何帮助都会很棒,谢谢!
答案 0 :(得分:5)
Graphcis
上下文已经被翻译为满足组件应该在其父容器中出现的x / y位置,这意味着Graphics
上下文的左上角{ {1}}方法实际上是0x0。
你需要为球定义一些大小,你在10x10上绘画,这表明你的球组件应该返回{10}的paintComponent
preferredSize
当球被添加到父容器中时,您将负责为球提供适当的布局细节...
public Dimension getPreferredSize() {
return new Dimension(10, 10);
}
当然,这假设您为父容器设置了public void mouseClicked(MouseEvent evt) {
Point p = evt.getPoint();
Ball ball = new Ball();
Dimension size = ball.getPreferredSize();
ball.setBounds(new Rectangle(p, size));
add(ball);
}
布局
<强>已更新强>
像...一样的东西。
null
答案 1 :(得分:4)
您可能需要点击主JPanel
。
我宁愿设计主面板来处理鼠标单击而Ball
类是一个简单的Object
,它定义了一个知道如何绘制{{1}的drawBall(Graphics g, int x, int y)
方法}}。这将由主面板中的Ball
方法调用。在主面板中,您可以单击鼠标,创建paintComponent()
类型的对象并调用Ball
。在repaint()
内,您拨打paintComponent()
。