我正在尝试向我的JApplet添加一个点,并一直在搜索谷歌和雅虎的答案无济于事。每当我做的时候
public class Chaos
{
Point p = new Point(75, 25);
public void frame()
{
JApplet applet = new JApplet
applet.add(p); //error on this line
}
}
Eclipse说“容器类型中的方法add(Component)不适用于参数(Point) 对于某些人来说,这似乎是一个显而易见的问题,我对Java /
相对较新答案 0 :(得分:3)
一些基本规则:
add(Point p)
,它采用Point参数,因此编译器是正确的抱怨。< / LI>
paintComponent(...)
方法中进行绘制,然后将该JPanel作为JApplet的contentPane。有几个不错的教程将告诉你如何做到这一点。paint(...)
绘图,因为你失去了Swing图形的所有好处,包括当你想做动画时自动双缓冲。答案 1 :(得分:0)
这是因为您只能将Component
派生类的内容添加到JApplet
(尽管如果您使用JApplet
),则最好添加JComponent
派生实例。 Eclipse在您的代码中指出了语义错误,因为数据类型(add
方法的预期类型和您作为参数传递的变量类型)不匹配。
如果你想在applet中绘制一个点,你必须在代码中覆盖applet的paint
方法,并画一条长一行(或一个像素的矩形)尺寸)。像这样:
import java.awt.*;
import javax.swing.JApplet;
public class test extends JApplet {
@Override
public void paint(Graphics g) {
int x = 75;
int y = 75;
g.fillRect(x, y, 1, 1);
}
}
如果您计划在画布上添加多个点,请将其存储在列表中,然后按照上述paint
方法进行迭代和绘制:
public class test extends JApplet {
private List<Point2D> points;
@Override
public void init() {
points = new ArrayList<Point2D>();
points.add(new Point2D.Double(75.0, 75.0));
};
@Override
public void paint(Graphics g) {
g.setColor(Color.BLUE);
for (Point2D p : points) {
int x = (int) p.getX();
int y = (int) p.getY();
g.fillRect(x, y, 1, 1);
}
}
}
如果你真的想将你的观点视为Component
,那么你可以创建自己的自定义Point类,该类派生自JComponent
个现有类之一(如JPanel
)虽然更复杂。