2011-12-06 1 views
0

なぜ私のコードがうまくいかないのか分かりませんが、それは私を狂わせてしまいます。このコードが線を引っ張っていないのはなぜですか?

コードの第二セットは私が作るときに、2匹のマウスは、それが描くクリックすること4キャンバスのを作るために必要なドライバプログラムである:

この

は、ボタンを描画し、上に描画するための領域を作成する必要があります私のクラスでありますキャンバスをもう一度クリックしてクリックすると、2回のクリックの間に行が表示されてから再描画されます。

次のエラーが発生します。 エラー:無効なメソッド宣言。戻り値の型が必要です addMouseListener(this); ^ エラー:不正なタイプの開始 addMouseListener(this); ^

public class Scribble extends JPanel implements MouseListener 
{ 
addMouseListener(this); 
int x, x1, y, y1; 
boolean flag = false; 

protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.drawLine(x, y, x1, y1); 
} 


public void mouseReleased(MouseEvent e) 
{ 

    if (!flag){ 
     x = e.getX(); 
     y = e.getY(); 
     flag = true; 
    } 
    else{ 
     x1 = e.getX(); 
     y1 = e.getY(); 
     flag = false; 
     repaint(); 
} 
} 



public void mouseExited(MouseEvent e){} 
public void mouseClicked(MouseEvent e){} 
public void mousePressed(MouseEvent e){} 
public void mouseMoved(MouseEvent e){} 
public void mouseEntered(MouseEvent e){} 

} 



public class Lab8Draw extends JFrame{ 

public Lab8Draw(){ 
    Color c = new Color(100, 10, 200); 
    setTitle("Lab 8 - Application #1"); 
    setLayout(new GridLayout(2,2)); 
    Scribble s = new Scribble(); 
    s.setBackground(Color.WHITE); 
    add(s); 
    Scribble s1 = new Scribble(); 
    s1.setBackground(Color.RED); 
    add(s1); 
    Scribble s2 = new Scribble(); 
    s2.setBackground(c); 
    add(s2); 
    Scribble s3 = new Scribble(); 
    s.setBackground(Color.BLUE); 
    add(s3); 

} 


    public static void main (String[] args){ 


     Lab8Draw frame = new Lab8Draw(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(800, 800); 
     frame.setVisible(true); 
    } 
} 

答えて

1

あなたはMouseListener

public class Scribble extends JPanel implements MouseListener 

を実装し、それが

Scribble s = new Scribble(); 
s.addMouseListener(s); 

Java tutorialsMouseListenerを書くことに有用な指針を提供登録する必要があります。

MouseInputAdapterを拡張する内部クラスを定義するには、MouseListenerメソッドの空の実装がすでに存在するため、このクラスを定義することもできます。

+0

私はのMouseListener – Robert

+0

エラーを実装しようとしたとき、私はこのエラーを取得:落書きは抽象的ではないとのMouseListener 落書きがJPanelのはのMouseListener ^ – Robert

+0

あなたは規定のすべてのメソッドを実装する必要がありますを実装して拡張するパブリッククラスの抽象メソッドのmouseEntered(MouseEventの)をオーバーライドしません。 _MouseListener_インターフェイス上でこれは通常、IDE経由で行うのが最も簡単です(source-> override/Eclipse実装)。これらが空の実装であれば(実際に何もしないでください)、定義しなければなりません! –

1

最初のステップは、あなたのスクラブルクラスをJPanelに拡張することです。また、キャンバスにaddMouseListenerメソッドを呼び出させる必要があります。今、あなたが本当に持っているのは、JFrameの4つのキャンバスです。そのクラス内のパネルにMouseListenerを追加しないでください。リスナーは、Scribbleクラスのインスタンスに追加します。また、ドライバクラスのの中にMouseListener を実装してください。 JPanelクラスでは使用しないでください。

+0

エラーが発生した場合は、他の方法と同じようにそのメソッドを空にします。 MouseListenerには4つではなく5つのメソッドがあります –

+0

ドライバクラスの中でMouseListenerを実装することで何を意味するのかよくわかりません。私は現在、落書きで実装しています。それはどういう意味ですか? – Robert

+0

私は今コンストラクタにaddMouseListenerを追加する必要があったし、あなたの助けに感謝の外にそれを持っていた – Robert

0

まず、クラスScribbleMouseListenerを実装し、マウスイベントをキャプチャするためにaddMouseListener()メソッド経由でイベントハンドラを割り当てる必要があります。 MouseListenerインタフェースには、オーバーライドする必要がある次のメソッドがあります。

class Scribble extends JPanel implements MouseListener 
{ 
    int x, x1, y, y1; 
    boolean flag = false; 
    public Scribble(){ 
    addMouseListener(this); 
    } 
    protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawLine(x, y, x1, y1); 
    } 
    public void mouseReleased(MouseEvent e){ 
    if (!flag){ 
     x = e.getX(); 
     y = e.getY(); 
     flag = true; 
    } 
    else{ 
     x1 = e.getX(); 
     y1 = e.getY(); 
     flag = false; 
     repaint(); 
    } 
    } 
public void mouseExited(MouseEvent e){} 
public void mouseClicked(MouseEvent e){} 
public void mousePressed(MouseEvent e){} 
public void mouseMoved(MouseEvent e) {} 
public void mouseEntered(MouseEvent e) {} 
} 
+0

私は試して、MouseListenerを実装するときエラーが発生します:スクリーブル抽象的なではないと抽象メソッドmouseEntered(MouseEvent) MouseListener内の パブリッククラススクリーブル拡張JPanelはMouseListenerを実装します – Robert

+0

エラー:無効なメソッド宣言です。戻り値の型が必要です。 \t addMouseListener(this); \t^ エラー:不正な形式の開始 \t addMouseListener(this); – Robert

+0

@ user512915 - 何か不足している可能性があります。私の編集されたポストを参照してください。 – adatapost

0

あなた自身をMouseListenerとして追加しましたか?例えば。

this.addMouseListener(this);

+0

エラー:タイプの不正な開始 \t this.addMouseListener(this); \t^ ';'予想される \t this.addMouseListener(this); \t^ エラー:無効なメソッド宣言。戻り値の型が必要です \t this.addMouseListener(this); \t^ エラー:不正な形式の開始 \t this.addMouseListener(this); – Robert

0

JPanels "Scribble"をJFrameに描画すると、座標は初期化されていないため、すべて0になると思います。したがって、P(0/0)からP(0/0)までの線があります。

MouseListenerが動作しているかどうかを確認してください....どこに登録しますか? MouseListenerを実装する必要はありませんか?がんばろう。

関連する問題