gpt4 book ai didi

java - 自定义 JScrollbar 问题(更改旋钮/拇指)

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:24 26 4
gpt4 key购买 nike

我想更改 JScrollBar 的外观。
我通过覆盖/扩展 ScrollBarUI 来做到这一点。
通过覆盖createIncreaseButton来改变箭头按钮的外观是没有问题的。和createDecreaseButton 。我通过覆盖paintThumb和paintTrack方法来更改轨道的宽度。

现在看起来像<----o----> (非常细的轨迹线和椭圆形拇指/旋钮)。
问题:
直到最后旋钮都无法移动:
它看起来像什么:   <---o------>
它应该是什么样子:<---------o>

我知道这是因为我使椭圆形不拉伸(stretch)(原始矩形随宽度拉伸(stretch))。
我完全不知道如何改变拇指移动的计算,以便它可以移动到最后。

我将非常感谢您的帮助。

代码如下:

public class TestScrollBarMain extends JFrame {

public TestScrollBarMain() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
JPanel p = new JPanel();
p.setPreferredSize(new Dimension(500, 500));
JScrollPane s = new JScrollPane(p);
MyScrollBar b = new MyScrollBar();
s.setVerticalScrollBar(b);
getContentPane().add(s);
setSize(100, 100);
setVisible(true);
}

public static void main(String[] args) {
new TestScrollBarMain();
}

public class MyScrollBarUI extends BasicScrollBarUI {

@Override
protected void paintThumb(final Graphics g, final JComponent c, final Rectangle thumbBounds) {
if (thumbBounds.isEmpty() || !this.scrollbar.isEnabled()) {
return;
}
g.translate(thumbBounds.x, thumbBounds.y);
g.setColor(this.thumbDarkShadowColor);
g.drawOval(2, 0, 14, 14);
g.setColor(this.thumbColor);
g.fillOval(2, 0, 14, 14);
g.setColor(this.thumbHighlightColor);
g.setColor(this.thumbLightShadowColor);
g.translate(-thumbBounds.x, -thumbBounds.y);
}

@Override
protected void paintTrack(final Graphics g, final JComponent c, final Rectangle trackBounds) {
g.setColor(Color.black);
g.fillRect(trackBounds.width / 2, trackBounds.y, 3, trackBounds.height);
if (this.trackHighlight == BasicScrollBarUI.DECREASE_HIGHLIGHT) {
this.paintDecreaseHighlight(g);
} else if (this.trackHighlight == BasicScrollBarUI.INCREASE_HIGHLIGHT) {
this.paintIncreaseHighlight(g);
}
}
}

public class MyScrollBar extends JScrollBar {

MyScrollBar() {
super();
setUI(new MyScrollBarUI());
}
}

}

最佳答案

将其包含在您的 MyScrollBarUI 代码中:

  protected void setThumbBounds(int x, int y,int width,int height)
{
super.setThumbBounds(x, y, 14, 14);
}
protected Rectangle getThumbBounds()
{
return new Rectangle(super.getThumbBounds().x,super.getThumbBounds().y,14,14);
}
protected Dimension getMinimumThumbSize()
{
return new Dimension(14,14);
}
protected Dimension getMaximumThumbSize()
{
return new Dimension(14,14);
}

关于java - 自定义 JScrollbar 问题(更改旋钮/拇指),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865108/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com