【问题标题】:Custom design JScollPane Java Swing定制设计 JScollPane Java Swing
【发布时间】:2012-01-02 18:09:59
【问题描述】:

我需要为我所有的滚动窗格设计这个滚动条:

使用 Java Swing。我正在使用 Netbeans IDE。什么是最简单的解决方案?

非常感谢。

问候

【问题讨论】:

  • 我没有得到你。滚动窗格在其包含的元素大小受到影响时会自动插入滚动条。

标签: java swing scrollbar customization scrollpane


【解决方案1】:

您可以通过设置自定义 UI 来自定义 Swing 组件的外观。对于滚动窗格的滚动条,您可以这样做

scrollPane.getVerticalScrollBar().setUI(new MyScrollBarUI());

其中MyScrollBarUI 派生自javax.swing.plaf.basic.BasicScrollBarUI。要对所有滚动条执行此操作(不仅在 JScrollPane 实例中),请调用

UIManager.put("ScrollBarUI", "my.package.MyScrollBarUI");

在创建任何 Swing 组件之前。

MyScrollBarUI 中,您覆盖以下方法:

public class MyScrollBarUI extends BasicScrollBarUI {

    @Override
    protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
        // your code
    }

    @Override
    protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
        // your code
    }
}

您的滚动条在图形上非常简单,因此实现起来应该不会太难。

【讨论】:

  • 确保在BasicScrollBarUI 中覆盖protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds)paintThumb(相同的方法签名),否则您可能什么也看不到。
  • 是否可以不硬编码extends BasicScrollBarUI,而是扩展当前使用的滚动条 UI 类?喜欢extends scrollBar.getUI().getClass()
  • 不,在 JVM 上继承是不可能的
【解决方案2】:

1) 覆盖JToolBar

2) 大多数Custom Look and Feel 覆盖了它

【讨论】:

  • 工具栏与滚动条的关系是...... ;-) 另外(毕竟是星期一早上):您覆盖方法,扩展(或实现)类
【解决方案3】:

不要忘记,如果你打算像这样使用 UIManager 来覆盖所有滚动条

UIManager.put("ScrollBarUI", "my.custom.SimpleScrollBarUI");

那么您的 SimpleScrollBarUI 类必须具有 createUI 方法,即:

public class SimpleScrollBarUI extends BasicScrollBarUI {

    public static ComponentUI createUI(JComponent c) {
        return new SimpleScrollBarUI();
    }

    //...

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 2013-04-08
    • 2015-04-04
    相关资源
    最近更新 更多