【问题标题】:Using JScrollPane on JLabel in Java在 Java 中的 JLabel 上使用 JScrollPane
【发布时间】:2018-10-25 17:36:09
【问题描述】:

不知何故,我没有显示滚动窗格。我需要改变什么?

bigP = new JLabel();
setLayout(new BorderLayout());

JPanel helper = new JPanel(new FlowLayout());
helper.add(bigP);
helper.setPreferredSize(new Dimension(500,600));
helper.add(new JScrollPane(bigP, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
                             JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS));

picPane = new JPanel(new BorderLayout());
picPane.add(helper,BorderLayout.CENTER);
picPane.setMaximumSize(new Dimension(500, 600));
picPane.setVisible(true);

add(picPane, BorderLayout.CENTER);

选择图像后,调用此行:

bigP.setIcon(img);

我发现我肯定需要辅助面板,因为 BorderLayout 只需要一个组件(据我所知)。 不幸的是,尽管图片显示,但我的滚动窗格根本不会显示。

【问题讨论】:

    标签: java jpanel jscrollpane imageicon scrollpane


    【解决方案1】:
    helper.setPreferredSize(new Dimension(500,600));
    

    不要硬编码首选尺寸。面板将根据添加到面板的组件确定自己的首选尺寸。

    JPanel helper = new JPanel(new FlowLayout());
    helper.add(bigP);
    sc = new JScrollPane(bigP,JScrollPane
    

    同样,一个组件只能有一个父级。在上面的代码中,您尝试将“bigP”添加到“helper”。但是在下一个语句中,您将它添加到滚动窗格中,因此“bigP”从“帮助”面板中删除,并且只会出现在滚动窗格中。

    //pic.add(bigP,BorderLayout.CENTER);
    pic.add(helper,BorderLayout.CENTER);
    

    您也永远不会将滚动窗格添加到“图片”面板。代码应该是:

    //pic.add(bigP,BorderLayout.CENTER);
    //pic.add(helper,BorderLayout.CENTER);
    pic.add(sc, BorderLayout.CENTER);
    

    所以现在你应该有一个看起来像这样的结构:

    - pic
        - sc
            - bigP
    

    如果您使用更具描述性的名称也会有所帮助,以便每个人都知道这些变量是什么。

    【讨论】:

    • 非常感谢!好像我误解了 ScrollPane 的概念。现在工作正常!
    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    • 2013-11-15
    • 2012-03-09
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多