2017-09-27 11 views
0

私はここで初心者です。私はJLabelのテキストを移動マウスの位置のテキストに変更したいコードをここから取得しています。ここに私のコードです。マウス - モーションリスナーが動作しない

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionListener; 

public class Draw extends JFrame{ 

    int x; 
    int y; 

    String positions = "Positions: " + x + ", " + y; 
    JLabel positionsOnFrame = new JLabel(positions); 

    public class AL implements MouseMotionListener { 

     public void mouseMoved(MouseEvent e) { 
      x = e.getX(); 
      y = e.getY(); 

     } 


     public void mouseDragged(MouseEvent e) { 
      positions += " dragged."; 
     } 
    } 

    //Constructor 
    public Draw() { 
     setTitle("Title"); 
     setBackground(Color.BLACK); 
     setSize(300, 300); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 

     addMouseMotionListener(new AL()); 
     add(positionsOnFrame); 

     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new Draw(); 
    } 
} 

サイドの問題:コンストラクタから黒色に設定されていても、JFrameは黒くならない。

マウスの問題に対する解決策はありますか?何も起こりません!値は0に設定されています! (私はそれらを初期化していない、彼らは自動的に0に設定されています!)。 ヘルプは間違いなく感謝します!

+0

色の問題については、次のようにします。getContentPane()。setBackground(Color.BLACK); – isaace

+0

私に解決策を教えていただきありがとうございますが、バックグラウンドを設定するためにgetContentPane()を呼び出さなければならないのはなぜですか?前もって感謝します! –

答えて

0

まず、初期化されていない整数がゼロのデフォルト値が与えられhello両方の時間を印刷します。しかし、これに頼るのは良い習慣ではありません。たとえまだゼロであっても明示的に値を初期化するのが最善です。

次に、mouseMoved()コールバックが実際に呼び出されています。しかし、それはあなたの 'positionsOnFrame'ラベルのテキストを更新していません、それはxとyの座標を更新するだけです。文字列(位置)でラベルを作成したからといって、文字列が変更されるたびにラベルのテキストが自動的に変更されるわけではありません。それに応じてラベルのテキストを変更する必要があります。したがって、positionsOnFrame.setText( "Positions:" + x + "、" + y);を追加します。 mouseMoved()コールバックの中でその部分が修正されます。

最後に、フレームの代わりに、フレームのコンテンツペインの色を直接変更します。getContentPane()。setBackground(Color.BLACK);

希望に役立ちます!

+0

うわー!あなたは最高です!どうもありがとうございます!しかし、なぜsetBackground(Color.BLACK); getContentPane()を呼び出さずに作業しますか? –

+0

これは、コンテンツペインがJFrameの上にオーバーレイされているためです。詳細は、ルート・ペインを使用する方法を参照してください。http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html – BinaryDigit09

+0

おかげさまではありませんか? +1 –

0

これは

public void mouseMoved(MouseEvent e) { 
     x = e.getX(); 
     y = e.getY(); 
     positionsOnFrame.setText("Positions: " + x +", " + y); 
     System.out.println(x); 
    } 

を動作するはずですし、背景色のために、この作業をする必要があります。

getContentPane().setBackground(Color.BLACK); 

文字列positionsはたびxy変更を変更することはありません。最初に割り当てたときの値は、xyのままです。

String s = "hello"; 

    String t = s; 

    System.out.println(t); 

    s = "bye"; 

    System.out.println(t); 

例えば

は、(XおよびYなど)

+0

ありがとう、それは働いた!しかし、なぜ私のコードがうまくいかなかったのか、私のコードのバグは何だったのか、私に説明できますか?編集:ちょうどあなたが行った編集を見た、説明する時間を割いてくれてありがとう! –

+0

私の答えの最後の部分が働いていない理由を参照してください。 – isaace

+0

うん、私はちょうどその編集を見た、ありがとう! –

関連する問題