【发布时间】:2021-05-27 02:42:39
【问题描述】:
我正在开发一个摇摆应用程序(让我们省略原因)。
我需要对滚动条进行自定义设计。到目前为止一切顺利,我实现了 ScrollBarUI 的后代 - 我有自定义按钮、自定义拇指、自定义轨道......除了按钮周围的区域 - 我在那里添加了一些填充,我想换行我所有的滚动条都变成了一个圆角矩形。
由于我还没有找到在 ScrollBarUI 中执行此操作的方法,因此我决定扩展 JScrollPane(以扩展那里使用的 ScrollBar,这样我就可以绘制圆形paintComponent 中的矩形)。这是我做的:
public class MyScrollPane extends JScrollPane {
public MyScrollPane(Component view) {
super(view);
}
@Override
public JScrollBar createVerticalScrollBar() {
return new MyScrollBar(JScrollBar.VERTICAL);
}
@Override
public JScrollBar createHorizontalScrollBar() {
return new MyScrollBar(JScrollBar.HORIZONTAL);
}
protected class MyScrollBar extends ScrollBar {
public MyScrollBar(int orientation) {
super(orientation);
setUI(MyScrollBarUI.createUI(this));
setOpaque(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
int borderDiameterX = 32;
int borderDiameterY = 32;
g2.translate(this.getX(), this.getY());
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.gray);
g2.fillRoundRect(0, 0, getWidth() - 1, getHeight() - 1, borderDiameterX, borderDiameterY);
g2.translate(-this.getX(), -this.getY());
}
}
}
很遗憾,这不起作用:
- 如果
setOpacity(true)- 它会在按钮周围绘制默认颜色的正方形 - 如果
setOpacity(false)- 它不绘制背景
代码被调用,我检查了。滚动条的内部元素-拇指,按钮都很好。
我错过了什么?
【问题讨论】:
-
Nimbus look and feel 具有圆形滚动条。您是否查看了代码以了解他们是如何做到的?据我所知,您只需要更改 UI 类即可更改外观。
-
@Abra 不。谢谢,我去看看。
标签: java swing scrollbar styling