【问题标题】:How to hide the arrow buttons in a JScrollBar如何隐藏 JScrollBar 中的箭头按钮
【发布时间】:2011-10-03 09:45:23
【问题描述】:

我需要在 AWT 应用程序中隐藏 java.awt.Scrollbar(VERTICAL) 的箭头按钮。 有谁知道这是如何实现的?

我看到了一个示例here,但代码只是隐藏了按钮。按钮的空闲空间仍然存在;它没有被滚动条占据。

更准确地说,这是我应该实现的屏幕截图。我不确定该往哪个方向发展。

更新:我在 AWT 中寻找解决方案。但现在我也对 Swing 中的建议持开放态度。

【问题讨论】:

  • 与 Swing 不同,AWT 组件没有pluggable look & feel。你需要哪一个,AWT 还是 Swing?
  • Scrollbar 是用于值选择还是作为ScrollPane 的一部分?考虑摆出一个sscce 来展示您的尝试。
  • 它将与 ScrollPane 一起使用。
  • 另外,我还没有为滚动条编写任何代码。所以不会提供 sscce

标签: java swing awt jscrollpane


【解决方案1】:

试试这个。它将垂直滚动条上的常规按钮替换为 0x0 大小的按钮。

它确实限制了你的外观和感觉:(

JScrollPane scroller = new JScrollPane(mainPane);
scroller.setPreferredSize(new Dimension(200,200));
// ... etc
scroller.getVerticalScrollBar().setUI(new BasicScrollBarUI()
    {   
        @Override
        protected JButton createDecreaseButton(int orientation) {
            return createZeroButton();
        }

        @Override    
        protected JButton createIncreaseButton(int orientation) {
            return createZeroButton();
        }

        private JButton createZeroButton() {
            JButton jbutton = new JButton();
            jbutton.setPreferredSize(new Dimension(0, 0));
            jbutton.setMinimumSize(new Dimension(0, 0));
            jbutton.setMaximumSize(new Dimension(0, 0));
            return jbutton;
        }
    });

更新:抱歉,这是一个摇摆解决方案

【讨论】:

    【解决方案2】:

    使用Nimbus Look and Feel,您可以使用它来删除箭头按钮:

        UIManager.getLookAndFeelDefaults().put(
            "ScrollBar:\"ScrollBar.button\".size", 0);
        UIManager.getLookAndFeelDefaults().put(
            "ScrollBar.decrementButtonGap", 0);
        UIManager.getLookAndFeelDefaults().put(
            "ScrollBar.incrementButtonGap", 0);
    

    这是一个完整的例子:

    public class ScrollDemo extends JFrame {
    
        public ScrollDemo() {
    
            String[] columnNames = {"Column"};
            Object[][] data = {
                    {"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
                    {"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
                    {"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
                    {"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
                    {"A"},{"B"},{"C"},{"D"},{"E"},{"F"},
            };
    
            add(new JScrollPane(new JTable(data, columnNames)));
            pack();
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
    
                @Override
                public void run() {
    
                    try {
                        UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
                    } catch (Exception e) {
                        // No Nimbus
                    }
                    UIManager.getLookAndFeelDefaults().put(
                            "ScrollBar:ScrollBarThumb[Enabled].backgroundPainter",
                            new FillPainter(new Color(127, 169, 191)));
                    UIManager.getLookAndFeelDefaults().put(
                            "ScrollBar:ScrollBarThumb[MouseOver].backgroundPainter",
                            new FillPainter(new Color(127, 169, 191)));
                    UIManager.getLookAndFeelDefaults().put(
                            "ScrollBar:ScrollBarTrack[Enabled].backgroundPainter",
                            new FillPainter(new Color(190, 212, 223)));
    
                    UIManager.getLookAndFeelDefaults().put(
                            "ScrollBar:\"ScrollBar.button\".size", 0);
                    UIManager.getLookAndFeelDefaults().put(
                            "ScrollBar.decrementButtonGap", 0);
                    UIManager.getLookAndFeelDefaults().put(
                            "ScrollBar.incrementButtonGap", 0);
    
                    new ScrollDemo();
                }
            });
        }
    
    }
    

    使用的Painter 的代码:

    public class FillPainter implements Painter<JComponent> {
    
        private final Color color;
    
        public FillPainter(Color c) { color = c; }
    
        @Override
        public void paint(Graphics2D g, JComponent object, int width, int height) {
            g.setColor(color);
            g.fillRect(0, 0, width-1, height-1);
        }
    
    }
    

    【讨论】:

    • 曾经有人说I think the only way to go is to stop using Nimbus,嗯,进步不错+1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2014-02-18
    • 2023-03-06
    • 2021-06-06
    • 1970-01-01
    • 2020-02-08
    • 2017-05-12
    相关资源
    最近更新 更多