【问题标题】:JScrollPane with scroll arrows but no scrollbar带有滚动箭头但没有滚动条的 JScrollPane
【发布时间】:2013-04-05 16:35:06
【问题描述】:

我想在这张图片上创建滚动窗格:

在组件侧带有箭头并且没有可见的滚动条。只需要水平滚动。可以用 JScrollPane 完成吗?

【问题讨论】:

    标签: java swing jscrollpane custom-component jscrollbar


    【解决方案1】:

    您可以通过使用滚动窗格和创建自己的按钮来使用滚动条的操作来创建自己的组件:

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.plaf.basic.*;
    
    public class ScrollPaneSSCCE extends JPanel
    {
        public ScrollPaneSSCCE()
        {
            setLayout( new BorderLayout() );
    
            JTextArea textArea = new JTextArea(1, 80);
            textArea.setText("Hopefully this will answer your question");
            JScrollPane scrollPane = new JScrollPane( textArea );
            scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            add(scrollPane);
    
            JScrollBar horizontal = scrollPane.getHorizontalScrollBar();
    
            BasicArrowButton west = new BasicArrowButton(BasicArrowButton.WEST);
            west.setAction( new ActionMapAction("", horizontal, "negativeUnitIncrement") );
            add(west, BorderLayout.WEST);
    
            BasicArrowButton east = new BasicArrowButton(BasicArrowButton.EAST);
            east.setAction( new ActionMapAction("", horizontal, "positiveUnitIncrement") );
            add(east, BorderLayout.EAST);
        }
    
        private static void createAndShowUI()
        {
            JFrame frame = new JFrame("ScrollPaneSSCCE");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.add(new ScrollPaneSSCCE(), BorderLayout.NORTH);
            frame.setSize(100, 100);
            frame.setLocationByPlatform( true );
            frame.setVisible( true );
        }
    
        public static void main(String[] args)
        {
            EventQueue.invokeLater(new Runnable()
            {
                public void run()
                {
                    createAndShowUI();
                }
            });
        }
    }
    

    您还需要使用Action Map Action 类。

    【讨论】:

    • 效果很好,谢谢!小问题:当没有可滚动的内容(整个内容适合屏幕)时,如何使这些按钮不可见?
    • 向 scrollPane 添加一个 ComponentListener 并监听 componentResized() 方法。然后检查添加到滚动窗格的组件的首选大小和滚动窗格的大小。当首选尺寸更大时,您会显示按钮,否则会隐藏它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2016-08-04
    相关资源
    最近更新 更多