【问题标题】:Stop expansion of JScrollPane within a BoxLayout在 BoxLayout 中停止扩展 JScrollPane
【发布时间】:2015-07-16 13:24:41
【问题描述】:

下面JPanel 中的JScrollPane 扩展以填充框架。如何停止这种扩展,以使 JScrollPane 的大小与其中的 JButton 的大小相同?

  public class GUITest extends JFrame {

    public GUITest() {
        setPreferredSize(new Dimension(700, 500));
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
        add(mainPanel);

        JButton button1 = new JButton();
        JButton button2 = new JButton();
        JButton button3 = new JButton();

        JScrollPane pane1 = new JScrollPane();
        mainPanel.add(button1);
        mainPanel.add(pane1);
        pane1.setViewportView(button2);
        mainPanel.add(button3);

        //Display the window.
        super.pack();
        super.setLocationRelativeTo(null);
        super.setVisible(true);
    }
}

我试过了

pane1.setMaximumSize(button2.getPreferredSize());

但是滚动条出现了,我看不到按钮。另外,在我的实际程序中,JScrollPane 中的组件将在运行时动态添加,因此我需要 JScrollPane 来扩展它。

【问题讨论】:

    标签: java swing jscrollpane boxlayout


    【解决方案1】:

    使用

    pane1.setPreferredSize(button2.getPreferredSize());
    

    如果您仍然有自动调整大小的问题,请使用以下方法修复面板尺寸:

    pane1.setMaximumSize(button2.getPreferredSize());
    pane1.setMinimumSize(button2.getPreferredSize());
    

    【讨论】:

    • 我仍然看不到按钮,并且滚动条在不应该出现的时候仍然可见。另外,我将在运行时向 ScrollBar 添加组件,那么如何将首选大小设置为所有组件的总大小?
    • 我已经用我的真实程序解决了这个问题,所以一切都很好。感谢您的帮助!
    • 很高兴为您提供帮助! @notnek :)
    猜你喜欢
    • 2012-12-10
    • 2020-05-27
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多