如何向JApplet添加一个点?

时间:2013-01-04 02:20:55

标签: java eclipse swing japplet

我正在尝试向我的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 /

相对较新

2 个答案:

答案 0 :(得分:3)

一些基本规则:

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

答案 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)虽然更复杂。