1
我想更改JScrollBar的外觀。
我這樣做覆蓋/擴展ScrollBarUI。
通過覆蓋createIncreaseButton
和createDecreaseButton
來改變箭頭按鈕的外觀是沒有問題的。 我通過覆蓋paintThumb和paintTrack方法來改變軌道的寬度。自定義JScrollbar問題(更改旋鈕/拇指)
它現在看起來像<----o---->
(非常薄的軌跡線和一個橢圓形的拇指/旋鈕)。
問題:
旋鈕不能移動,直到盡頭:
它是什麼樣子: <---o------>
它應該是什麼樣子:<---------o>
我知道這是因爲我做了橢圓不伸展(原始矩形與寬度一起伸展)。
我完全無法改變拇指移動的計算,所以它可以移動到最後。
我會非常感謝幫助。
繼承人的代碼:
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());
}
}
}
一個漂亮的外觀爲您的問題也很重要... – 2010-05-19 11:52:47
請提供paintThumb和paintTrack代碼 – akf 2010-05-19 12:39:59