1

私は非常に大きなデータの見方をしています。ユーザー用のスクロールバーが必要ですが、スクロールバーが上下矢印 (またはキーボードの上下キー) を押したり、ページアップを行うトラック領域をクリックしたりする標準的な方法をオーバーライドしたいと考えています。ページダウン。これは、データがビューにストリーミングされ、JScrollBar の「最小/最大/値」のモデルが機能しないためです。

これらのマウスまたはキーイベントを処理する標準的な方法は、スクロールバーの値を「単位増分」(小さい値) または「ブロック増分」(大きい値) のいずれかで調整することです。 クリックしたときにスクロールバーの値を変更したくありません。「ユーザーが1ブロック上にスクロールするように要求した」または「ユーザーが1単位下にスクロールするように要求した」というイベントを受け取りたいだけです。これを行う方法を知っている人はいますか?

ところで、BasicScrollBarUI$TrackListener.mousePressed(MouseEvent)クリックを処理するように見え、常に を呼び出しますscrollbar.setValue(newValue)。だから私は運が悪いかもしれません:(

おそらく、SWT スクロールバーでそれを行う方法はありますか?

4

2 に答える 2

1

Swingコンポーネントは、アクションを使用してKeyStrokesと多くのマウスイベントを処理します。スクロールバーでサポートされているアクションのリストについては、キーバインディングを確認してください。

これらのアクションを独自のカスタムアクションに置き換えることができるはずです。

于 2011-08-24T20:03:49.943 に答える
1

私はそれを行う方法を理解しました。スクロールバーにデフォルトを拡張するカスタムUIを提供しますが、必要な2つの重要なメソッドであるとBasicScrollBarUIをオーバーライドします。必要に応じて、イベントを台無しにすることなく、これらのメソッド内で呼び出すことができます。scrollByBlock()scrollByUnit()setValue()

class MyUI extends BasicScrollBarUI
{
    @Override
    protected void scrollByBlock(int direction)
    {
        System.out.println("scrollByBlock " + direction);
        // super.scrollByBlock(direction);
        scrollBar.setValue(scrollBar.getValue() + (direction * 10));
    }

    @Override
    protected void scrollByUnit(int direction)
    {
        System.out.println("scrollByUnit " + direction);
        // super.scrollByUnit(direction);
        scrollBar.setValue(scrollBar.getValue() + (direction * 3));
    }
}
于 2011-08-26T01:47:59.447 に答える