-5

我正在尝试在我的 JApplet 中添加一个点,并且一直在搜索 google 和 yahoo 以寻求无济于事的答案。每当我这样做

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 比较陌生/

4

2 回答 2

3

一些基本规则:

  • 您可以合法调用变量的唯一方法是变量可用的方法。
  • 对于核心 Java 类,例如 JApplets,这些方法在 Java API 中得到了很好的定义。
  • 如果您在 API 中查找 JApplet 及其所有父类,您会发现没有 add 方法,add(Point p)它接受一个 Point 参数,因此编译器抱怨是正确的。
  • 您对这个问题的主要问题是您告诉我们问题,但您没有告诉我们您要解决的问题。正如我在上面的评论中所说,“向 JApplet 添加一个点”没有逻辑意义。你希望小程序用这​​个点做什么?改变是位置?在它的窗口上画一个点?这些细节将改变您可用的可能解决方案,在我们知道之前,我们只能告诉您一般规则,例如我在这篇文章中列出的规则。
  • 如果您的目标是在 JApplet 上绘图,则改为在 JPanel 的paintComponent(...)方法中进行绘图,然后将该 JPanel 设为 JApplet 的 contentPane。有几个不错的教程将向您展示如何做到这一点。
  • 不要使用 Applet 或直接使用paint(...)另一张海报所建议的绘图,因为您会失去 Swing 图形的所有好处,包括当您想要制作动画时的自动双缓冲。
  • 根据 Andrew Thompson 的说法,Swing Graphics 还为您提供:键绑定、表格、树和格式化文本组件、PLAF、一些布局、访问千年以来使用它的人。
  • 这是一个使用 JApplet 绘图的示例:示例
于 2013-01-04T02:35:37.387 回答
0

那是因为您只能将Component派生类实例添加到 a JApplet(尽管JComponent如果您使用的是添加派生实例更可取 a JApplet)。Eclipse 在您的代码中指出了一个语义错误,因为数据类型(add方法的预期类型和您作为参数传递的变量类型)不匹配。

如果你想在小程序中一个点,你必须在你的代码中重写小程序的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);
    }   
}

如果您打算在画布上添加几个点,请将 then 存储在一个列表中,然后在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);
        }
    } 
}

如果您真的想将您的点视为Components,那么您可以创建自己的自定义 Point 类,该类派生自JComponent现有类之一(如JPanel),但这更复杂。

于 2013-01-04T02:39:48.260 回答