ネストされた 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 を使用しても何も修正されないようです。