この投稿から、 JComponentにサイズを設定しないでください。コンポーネントに優先サイズを設定せず、代わりにレイアウトマネージャーにこれを行わせることを理解しています。
私の質問は、私はこのような JFrame に JTabbedPane に入れた JPanel を持っているということです
JFrame frame=new JFrame();
JTabbedPane pane=new JTabbedPane();
pane.addTab("Tab 1",new JScrollPane(getJPanel1()));
pane.addTab("Tab 2",new JScrollPane(getJPanel2()));
frame.setContentPane(pane);
この場合、JTabbedPane は、追加する最大サイズのコンポーネントのサイズを取ります。このため、私の JScrollPane はまったく表示されません。JScrollPane の優先サイズを設定する必要があります。設定しないと、スクロール バーが表示されず、コンテンツが切り取られます。
これを解決するためにレイアウトマネージャーを使用するにはどうすればよいですか。私は具体的にこれをしたい:
JFrame/JTabbedPane/JPanelInTab を画面の高さまで拡張し (ウィンドウのタスクバーを取り込んで)、タブのコンテンツが切り取られる場合は、スクロールバーが表示されるようにします。フレームの幅は、JTabbedPane と正確に一致する必要があります。
編集
これは、私がやろうとしていることを示すMVCEです。peeskilet の提案に従って変更を含めましたが、効果はありません
import javax.swing.*;
import java.awt.*;
public class ScrollPaneTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame=new JFrame();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
JTabbedPane tabbedPane=new JTabbedPane();
tabbedPane.addTab("Tab 1", wrapWithBorderLayoutPanel(getPanel()));
tabbedPane.addTab("Tab 2", wrapWithBorderLayoutPanel(getPanel()));
//
// tabbedPane.addTab("Tab 1", new JScrollPane(getPanel()));
// tabbedPane.addTab("Tab 2", new JScrollPane(getPanel()));
frame.setContentPane(tabbedPane);
frame.pack();
frame.setVisible(true);
}
private JPanel wrapWithBorderLayoutPanel(JPanel panel) {
JPanel borderLayoutPanel=new JPanel(new BorderLayout());
borderLayoutPanel.add(new JScrollPane(panel), BorderLayout.CENTER);
return borderLayoutPanel;
}
private JPanel getPanel() {
JPanel panel=new JPanel();
Box box = Box.createVerticalBox();
for (int i = 1; i <= 100; i++) {
box.add(new JLabel("This is Label #" + i));
}
panel.add(box);
return panel;
}
});
}
}
私がそれをしたら、以下は私が得る出力です。フレームはタスクバーで終了しません。その後ろに伸びています。したがって、最後のラベルはタスクバーの後ろに隠されています。タスクバーが始まる前にフレームを終了させたいです。
PS: パネルを BorderLayout パネルでラップするか、スクロール ペインをタブ付きペインに直接追加しても、変更はありません。どちらも同じ結果になります。行をコメントアウトすることで同じことをテストできます
//tabbedPane.addTab("Tab 1", wrapWithBorderLayoutPanel(getPanel()));
//tabbedPane.addTab("Tab 2", wrapWithBorderLayoutPanel(getPanel()));
tabbedPane.addTab("Tab 1", new JScrollPane(getPanel()));
tabbedPane.addTab("Tab 2", new JScrollPane(getPanel()));