12

にスクロール機能を追加したいと思いjavax.swing.JDesktopPaneます。ただし、 a でラップしてjavax.swing.JScrollPaneも、望ましい動作は得られません。

Web を検索すると、これはかなり長い間問題になっていることがわかります。そこにはいくつかの 解決策がありますが、それらはかなり古いようで、完全に満足しているわけではありません。

アクティブに維持されているソリューションは何ですか?

4

3 に答える 3

6

独自のソリューションを作成して、JavaWorld のソリューションを使用しましたJScrollableDesktopPane.

于 2008-09-29T13:56:10.210 に答える
2

Javaworld'sJScrollableDesktopPaneは Web サイトで利用できなくなりました。私はそれのいくつかのコピーを集めることができましたが、どれも機能しません。

私が導き出した簡単な解決策は、次のような方法で実現できます。これは最も美しいというわけではありませんが、デフォルトの動作よりも確実にうまく機能します。

public class Window extends Frame {
    JScrollPane scrollContainer = new JScrollPane();
    JDesktopPane mainWorkingPane = new JDesktopPane();

    public Window() {
        scrollContainer.setViewportView(mainWorkingPane);

        addComponentListener(new ComponentAdapter() {
            public void componentResized(ComponentEvent evt) {
                revalidateDesktopPane();
            }
        });
    }

    private void revalidateDesktopPane() {
        Dimension dim = new Dimension(0,0);
        Component[] com = mainWorkingPane.getComponents();
        for (int i=0 ; i<com.length ; i++) {
            int w = (int) dim.getWidth()+com[i].getWidth();
            int h = (int) dim.getHeight()+com[i].getHeight();
            dim.setSize(new Dimension(w,h));
        }
        mainWorkingPane.setPreferredSize(dim);
        mainWorkingPane.revalidate();
        revalidate();
        repaint();  
    }
}

でラップJDesktopPaneJScrollPane、メイン フレームにサイズ変更リスナーを追加してから、サイズ変更の内容を評価するJDesktopPane(または新しい要素を追加する) というアイデアです。

これが誰かを助けることを願っています。

于 2015-06-16T16:22:50.000 に答える
1

私はこれを見つけました: http://www.javaworld.com/javaworld/jw-11-2001/jw-1130-jscroll.html?page=1

これは、Swing などに関する多くの説明と情報を含む素晴らしいチュートリアルであり、多くのものを含む JscrollableDesktopPane を作成できます。

要件を満たすには、コードの一部を少し変更する必要があります。

楽しみ !

于 2012-10-13T14:11:51.143 に答える