-5

私は自分のアプレットにポイントを追加しようとしていますが、グーグルとヤフーで無駄な答えを探しています。私がするときはいつでも

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

いくつかの基本的なルール:

  • 変数に対して合法的に呼び出すことができる唯一のメソッドは、変数で使用できるメソッドです。
  • JApplets などのコア Java クラスの場合、これらのメソッドは Java API で明確に定義されています。
  • JApplet とそのすべての親クラスを API で調べてみると、Point パラメーターを受け取る add メソッド ( ) がないことがわかります。add(Point p)したがって、コンパイラーは正しくエラーを出します。
  • この質問に関するあなたの主な問題は、あなたが問題を私たちに教えてくれることです。上記のコメントで述べたように、「ポイントを JApplet に追加する」ことは論理的な意味を持ちません。アプレットがこのポイントで何をしたいですか? 変更は場所ですか?その窓にスポットを描きますか?これらの詳細は、利用可能な解決策を変更します。私たちが知るまで、私たちがあなたに言えることは、この投稿にリストしたような一般的なルールだけです.
  • JApplet で描画することが目標の場合は、代わりに JPanel のpaintComponent(...)メソッドで描画を行い、その JPanel を JApplet の contentPane にします。これを行う方法を示す適切なチュートリアルがいくつかあります。
  • アプレットを使用したり、別のポスターで提案されているように直接描画したりしないでくださいpaint(...)。アニメーションを実行したい場合の自動ダブルバッファリングなど、Swing グラフィックスのすべての利点が失われるためです。
  • Andrew Thompson によると、Swing Graphics は、キー バインディング、テーブル、ツリー、書式設定されたテキスト コンポーネント、PLAF、いくつかのレイアウト、2000 年以上前から Swing Graphics を使用してきた人々へのアクセスも提供します。
  • JApplet を使用した描画の例を次に示します。
于 2013-01-04T02:35:37.387 に答える
0

Componentこれは、派生クラスのインスタンスのみを に追加できるためですJApplet(ただし、JComponentを使用している場合は派生インスタンスを追加することをお勧めしますJApplet)。データ型 (addメソッドの予想される型とパラメーターとして渡す変数の型) が一致しないため、Eclipse はコード内のセマンティック エラーを指摘しています。

アプレットでポイントを描画する場合は、コードでアプレットのpaintメソッドをオーバーライドし、1 ピクセルの長さの線 (または 1 ピクセル サイズの四角形) を描画する必要があります。このようなもの :

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の 1 つから派生した独自のカスタム Point クラスを作成できます( など)。ただし、これはより複雑です。JComponentJPanel

于 2013-01-04T02:39:48.260 に答える