3

私はこのような状況にあります。私はviewportViewがJPanelであるスクロールペインを持っていますそしてそのJPanelはBoxLayoutとしてレイアウトを持っています。このパネルでは、JPanelを拡張する1つのクラスを追加し、そのクラスにはJComponentsが含まれています。

したがって、アプリケーションの実行中、JComponentsはJScrollPaneに表示されます。これが私のScrollPaneの形成方法です。

ここでの問題は、データが約750行を超えると、スクロールバーが問題を引き起こし始めることです。マウスホイールで上下にスクロールすると、スクロールがスムーズに動かず、途中で急に止まってまた動き始め、ぎくしゃくした動きをします。私の質問は、このシナリオでマウスをスムーズに動かすにはどうすればよいかということです。

私のscrollPaneはこんな感じです

public JScrollPane getScrollPane() {
    if (scrollPane == null) {
        scrollPane = new JScrollPane();
        scrollPane.setSize(new Dimension(1000, 433));
        scrollPane.setLocation(new Point(10, 10));
        scrollPane.setColumnHeaderView(getHeaderOfRowPanel());
        scrollPane
                .setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setViewportView(getScrollPanel());
        scrollPane
                .setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.getVerticalScrollBar().setUnitIncrement(
                unitIncrement);

    }
    return scrollPane;
}

private JPanel getScrollPanel() {
    if (scrollPanel == null) {
        scrollPanel = new JPanel();
        scrollPanel.setBorder(null);
        scrollPanel.setLayout(new BoxLayout(getScrollPanel(),
                BoxLayout.Y_AXIS));
    }
    return scrollPanel;
}


private class RowPanel extends JPanel {
//My components are here ..
//I add this Panel in scrollPanel
}
4

3 に答える 3

2

@mKorbelが指摘しているように、便利なスクロールインクリメントのために両方JTableともJList 実装し、両方ともScrollableレンダリング速度のためにflyweightパターンを使用します。いずれかのコンポーネントを直接使用できない場合でも、パターンを使用できます。チュートリアルには例が含まれており、ここに例があります。ScrollableCellRendererPane

于 2012-06-25T16:49:19.113 に答える
2

そのような巨大な番号を入力することは決して良いことではありません。JScrollPane の行数。なぜなら、スクロールペインの高さと RowPanel の高さに応じて、表示される部分はビューポートで 20 ~ 30 行程度しかないからです。では、なぜこのような巨大な行を一度に入力する必要があるのでしょうか? 滑らかさの問題は、例外が発生する可能性があるためです (コンソールを参照)。では、これを解決してください。2 つの選択肢があります。1 つはページネーションを使用することで、もう 1 つはユーザーが検索条件を入力して不要なレコードを除外できるようにすることです。

于 2012-06-25T04:50:30.727 に答える