2011-07-25 3 views
2

私はいくつかの自動ループスクロール(マーキーのテキスト)の内容をJPanel必要とします。マウスのクリックで反応しなければなりません。要素の実際の位置が変化しないので、移動した座標でコンテンツを描画するだけでは機能しません。 また、更新可能である必要があります。ほとんどの場合、バウンスなしでスムーズな更新が行われます。 JScrollPaneスクロールと自動スクロールが表示されていないため、アクションリスナーを保持できますが、スムーズなループと内容のスムーズな更新はできません。JPanelでアクティブなコンテンツを自動スクロールする - マーキーのテキスト

http://h1.flashvortex.com/display.php?id=2_1311593920_25605_144_0_700_30_6_1_92

が、アニメーションを停止し、バウンスせずに、コードから内容を変更すると:

UPDATE が、それはこのようになります必要があります。

+0

私はmissunderstood – mKorbel

答えて

5

Marquee Panelを使用することができます。このコードでは実際のコンポーネントが使用されるため、コンポーネントに追加するリスナーを追加して反応させる必要があります。

編集:

おっと、私は私のコードは動作しません直接のMouseListenerを使用してそのコンポーネントをペイントするGraphics.translateを(...)メソッドを使用して、私が考えていたかわかりません。

EDIT2:

たぶん、次のコードが役立ちます。ただ、MarqueePanelクラスにメソッドを追加します。

public Component getComponentAtPoint(Point p) 
{ 
    int translatedX = p.x + scrollOffset; 

    if (isWrap()) 
    { 
     int preferredWidth = super.getPreferredSize().width; 
     preferredWidth += getWrapAmount(); 
     translatedX = translatedX % preferredWidth; 
    } 

    Point translated = new Point(translatedX, p.y); 

    for (Component c: getComponents()) 
    { 
     if (c.getBounds().contains(translated)) 
      return c; 
    } 

    return null; 
} 

は今、あなたはMarqueePanelにするMouseListenerを追加したMouseEventがために生成されたコンポーネントを決定するために、このメソッドを呼び出すことができます。どのコンポーネントがクリックされたか分かると、そのコンポーネントのアクションを手動で呼び出す必要があります。または、MouseEventをコンポーネントに再ディスパッチすることもできます。パネルがソースではなく、コンポーネントをイベントのソースにするには、MouseEventを再作成する必要があります。また、イベントのX/Y位置を、パネルではなくコンポーネントに関連させて隠す必要があります。 SwingUtilsクラスはこれを助けます。

+0

EAHで私の記事をdeleleted、そのことは素晴らしく見える、と偉大な動作しますが、のMouseListenerは、私が最初にそれを試してみましたと思います、正常に動作していません。本当に良いことを表示するだけのために – fland

+0

@fiand、おそらく更新が役立ちます。 – camickr

+0

ええ、それはかなりうまくいきます。ありがとう。ソースファイルに追加する必要があります – fland

1

MarqueePanelは、start()およびstop()の方法を含む。有用な出発点になるかもしれませんが、update()メソッドを除外しなければなりません。

補足:exampleJLabelを使用しているため、in situを編集することはできません。 JTextFieldを使用する場合、それは、Document対応するモデルを更新するのが最も簡単であり得ます。