我已经定义了一个名为Stone的类来为JPanel添加图形元素:
public class Stone {
private int x, y;
private Color color;
private static final int radius = 18;
Stone(Color color) {
this.color = color;
}
public Stone(int x, int y, Color color) {
this(color);
this.x = x;
this.y = y;
}
void draw(Graphics g) {
g.setColor(color);
g.fillOval(x - radius, y - radius, 2 * radius, 2 * radius);
}
void setX(int x) {
this.x = x;
}
void setY(int y) {
this.y = y;
}
}
我想在JPanel上绘制它们。我是否必须在JPanel的paint方法中执行此操作,或者是否可以使用JPanel的add方法?
答案 0 :(得分:9)
快速回答是您应该扩展JComponent
(因为您要将其添加到JPanel
)并覆盖paintComponent
方法(因为您需要对对象进行一些自定义绘制)。
答案 1 :(得分:6)
最简单的方法是让你的Stone
类扩展JComponent,将draw()重命名为paintComponent()并向你的JPanel添加Stone
实例。
答案 2 :(得分:4)
这取决于你想在屏幕上用它做什么。正如其他人提到的那样,你可以从JComponent继承,如果用户希望以某种方式与它进行交互,这可能是一个很好的选择。
更轻量级的方法可能是实现Shape接口,或提供方法getShape()。
您可以使用我之前写的ShapeIcon,将其添加到JLabel: http://softsmithy.sourceforge.net/lib/docs/api/org/softsmithy/lib/swing/icon/ShapeIcon.html
然后将JLabel添加到JPanel。
但是,您可能不是要将单个Stone图标添加到单个JLabel,而是先绘制图像并在JPanel中显示?
如果您能告诉我们更多有关您的目标的信息,我们可以为您提供更好的帮助。