4

ネストされた JScrollPanes に問題があります。基本的に、水平方向ではなく垂直方向にスクロールする外側の JScrollPane が 1 つ必要です (Netflix Web インターフェイスを考えてください)。この外側の JScrollPane 内には、水平方向にスクロールする複数の JScrollPanes が必要です。私の問題は、内側の JScrollPanes の水平スクロールバーが JPanel の優先サイズ全体を占めるように見えるため、表示されないことです。これが私が話していることを説明するための画像です:

ここに画像の説明を入力

編集: camickrの回答に基づくこのコードは現在機能しています:

import java.awt.BorderLayout;

import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class NestedScrollPane extends JFrame {

    public NestedScrollPane() {
        ScrollablePanel outerPanel = new ScrollablePanel();
        outerPanel.setScrollableWidth(ScrollablePanel.ScrollableSizeHint.FIT);
        outerPanel.setLayout(new BoxLayout(outerPanel, BoxLayout.Y_AXIS));
        for (int j = 0; j < 20; j++) {
            ScrollablePanel innerPanel = new ScrollablePanel();
            innerPanel.setScrollableHeight(ScrollablePanel.ScrollableSizeHint.NONE);
            innerPanel.setLayout(new BoxLayout(innerPanel, BoxLayout.X_AXIS));
            JScrollPane innerScrollPane = new JScrollPane(innerPanel);
            innerScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            for (int i = 0; i < 10; i++) {
                JLabel longLabel = new JLabel("asefaesfesfesfgesgersgrsgdrsgdrsgderg ");
                innerPanel.add(longLabel);
            }
            outerPanel.add(innerScrollPane);
        }
        JScrollPane outerPane = new JScrollPane(outerPanel);
        outerPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        this.setContentPane(outerPane);
        this.setSize(400, 400);
        outerPane.setSize(400, 400);
        this.setVisible(true);
    }

    public static void main (String[] args) {
        NestedScrollPane pane = new NestedScrollPane();
        pane.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

親のサイズ変更に従うように JScrollPane 内で JScrollPanes を取得する方法を調べましたが、外側のパネルで BoxLayout または BorderLayout を使用しても何も修正されないようです。

4

1 に答える 1