【问题标题】:How to get scrollbar to appear on a JList when the frame is too small to show all of the JList?当框架太小而无法显示所有 JList 时,如何让滚动条出现在 JList 上?
【发布时间】:2013-04-05 11:49:46
【问题描述】:

每当框架被调整到对于 List 本身来说太小时,我想在 JList 上显示一个滚动条。到目前为止,这是我拥有的代码。运行它,调整框架大小,并注意 JList 上从未出现过滚动条。

import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class JListScroll extends JPanel{

JScrollPane listScrollPane;

public JListScroll() {
    String[] stringArray = {"Testing","This","Stuff"};
    JList<String> rowList = new JList<String>(stringArray);
    listScrollPane = new JScrollPane();
    listScrollPane.getViewport().setView(rowList);
    this.setSize(new Dimension(75,200));
    this.add(listScrollPane);
    this.doLayout();
}

public static void main(String[] args){
    JFrame frame = new JFrame();
    JListScroll scrollPanel = new JListScroll();
    frame.add(scrollPanel);
    frame.setVisible(true);
    frame.setSize(new Dimension(75,300));
}

}

请注意如何添加了 JScrollPane,但当窗口变得非常小时,列表上不会出现滚动条。这就是我想要解决的问题。

提前致谢!

【问题讨论】:

    标签: java swing jscrollpane jlist


    【解决方案1】:
    • JPanel 已实现 FlowLayout

    • FlowLayout 仅接受 PreferredSize(在您的情况下由 setSize 硬编码)

    • FlowLayout 未指定,未实现任何调整大小的 JComponents(由 FlowLayout 放置)连同容器,JComponent 不可调整大小,保持原样

    • 不想评论您在此处发布的代码的内容,看看差异,相当不错的低级

    import java.awt.BorderLayout;
    import java.awt.Dimension;    
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    
    public class JListScroll {
    
        private JFrame frame = new JFrame();
        private JPanel panel = new JPanel();
        private JScrollPane listScrollPane = new JScrollPane();
        private String[] stringArray = {"Testing", "This", "Stuff"};
        private JList rowList = new JList(stringArray);
    
        public JListScroll() {
            rowList.setVisibleRowCount(2);
            listScrollPane.setViewportView(rowList);
            panel.setLayout(new BorderLayout());
            panel.add(listScrollPane);
            frame.add(panel);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // EDIT 
            frame.pack();
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    JListScroll jListScroll = new JListScroll();
                }
            });
        }
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用listScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS)方法强制(垂直)滚动条的可见性

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多