Java JScrollBar自定义滚动条ui图形留下痕迹
我正在做一个定制的JScrollBar ScrollBar.javaJava JScrollBar自定义滚动条ui图形留下痕迹,java,swing,graphics2d,jscrollbar,Java,Swing,Graphics2d,Jscrollbar,我正在做一个定制的JScrollBar ScrollBar.java public class ScrollBar extends JScrollBar { ScrollBar() { super(); setUI(new CustomScrollBarUI()); } } public class CustomScrollBarUI extends BasicScrollBarUI { @Override protected v
public class ScrollBar extends JScrollBar {
ScrollBar() {
super();
setUI(new CustomScrollBarUI());
}
}
public class CustomScrollBarUI extends BasicScrollBarUI {
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
Graphics2D g2d = (Graphics2D) g;
g.setColor(Color.BLACK);
g2d.fill(trackBounds);
g2d.draw(trackBounds);
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fill(thumbBounds);
g2d.draw(thumbBounds);
}
}
public class CustomScrollBarUI extends BasicScrollBarUI {
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
Graphics2D g2d = (Graphics2D) g;
g.setColor(Color.BLACK);
g2d.fill(trackBounds);
g2d.draw(trackBounds);
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fill(thumbBounds);
// g2d.draw(thumbBounds);
}
}
CustomScrollBarUI.java
public class ScrollBar extends JScrollBar {
ScrollBar() {
super();
setUI(new CustomScrollBarUI());
}
}
public class CustomScrollBarUI extends BasicScrollBarUI {
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
Graphics2D g2d = (Graphics2D) g;
g.setColor(Color.BLACK);
g2d.fill(trackBounds);
g2d.draw(trackBounds);
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fill(thumbBounds);
g2d.draw(thumbBounds);
}
}
public class CustomScrollBarUI extends BasicScrollBarUI {
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
Graphics2D g2d = (Graphics2D) g;
g.setColor(Color.BLACK);
g2d.fill(trackBounds);
g2d.draw(trackBounds);
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fill(thumbBounds);
// g2d.draw(thumbBounds);
}
}
但是,向下滚动时会留下白色痕迹,向上滚动时会清除
我试过很多东西
super.method()
super.paintThumb(g,c,thumbBounds)
和super.paintrack(g,c,trackBounds)
添加到这两个函数中,但没有任何更改
double last_posx = -1d;
double last_posy = -1d;
double last_posw = -1d;
double last_posh = -1d;
然后清除上一个矩形
if (last_posx != -1d) {
g.clearRect((int) last_posx, (int) last_posy, (int) last_posw, (int) last_posh);
}
这会导致效果增加更多,因此会留下更多的白色
super.paintTrack(g,c,super.getTrackBounds())
在绘制拇指之前重新绘制轨迹,以尝试清除之前的拇指
这产生了与1相同的效果
那么我该怎么做才能清除留下的白色痕迹呢
编辑
正如LuxxMiner提到的,这解决了问题,但我想知道为什么
CustomScrollBarUI.java
public class ScrollBar extends JScrollBar {
ScrollBar() {
super();
setUI(new CustomScrollBarUI());
}
}
public class CustomScrollBarUI extends BasicScrollBarUI {
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
Graphics2D g2d = (Graphics2D) g;
g.setColor(Color.BLACK);
g2d.fill(trackBounds);
g2d.draw(trackBounds);
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fill(thumbBounds);
g2d.draw(thumbBounds);
}
}
public class CustomScrollBarUI extends BasicScrollBarUI {
@Override
protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds) {
Graphics2D g2d = (Graphics2D) g;
g.setColor(Color.BLACK);
g2d.fill(trackBounds);
g2d.draw(trackBounds);
}
@Override
protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.WHITE);
g2d.fill(thumbBounds);
// g2d.draw(thumbBounds);
}
}
我不知道为什么,但是删除了
g2d.draw(thumbunds)代码>为我修复了它…是的,这也为我修复了轨迹。也许它自己画出了指界?