2
圖片解釋了這一切。我畫了一個新的拇指,當它高於95或低於5時,JSlider區域就會熄滅。我試過填充軌道沒有成功。使用paintThumb在0或100時,我已經使我的箭頭脫離JSlider,這怎麼解決?
沒有人有什麼祕訣嗎?
這是我的代碼。我相信我的問題很好,在getThumbSize覆蓋下調整拇指大小。
private static class MySliderUI extends BasicSliderUI {
private int thumbHeight = 22;
private int thumbWidth = 22;
public MySliderUI(JSlider b) {
super(b);
// this.thumbHeight = slider.getHeight();
// this.thumbWidth = slider.getHeight();
}
@Override
protected Dimension getThumbSize() {
return new Dimension(thumbHeight, thumbWidth);
}
@Override
public void paintTrack(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
Rectangle r = trackRect;
r.width = 40; // (int) (0.15 * r.getHeight());
float[] dist = { 0.1f, 0.5f, 0.9f };
Color[] colors = { new Color(34, 177, 76), new Color(255, 242, 0),
new Color(237, 28, 36) };
Point2D start = new Point2D.Float(r.x, r.y);
Point2D end = new Point2D.Float(r.x, r.y + r.height);
LinearGradientPaint p = new LinearGradientPaint(start, end, dist,
colors);
g2d.setPaint(p);
g2d.fill(r);
}
@Override
public void paintThumb(Graphics g) {
Graphics2D g1 = (Graphics2D) g;
// Make a triangle - Arrow on Meter
int[] x = new int[3];
int[] y = new int[3];
int n; // count of points
// Set Points for Arrow
Integer arrowX = thumbRect.x;
Integer arrowY = thumbRect.y;
x[0] = arrowX - 25;
x[1] = arrowX - 25;
x[2] = arrowX - 2;
y[0] = arrowY - 17; // Top Left
y[1] = arrowY + 27; // Bottom Left
y[2] = arrowY + 5; // Tip of Arrow
n = 3; // Number of points, 3 because its a triangle
// Draw Arrow Border
Polygon myTriShadow = new Polygon(x, y, n); // a triangle
g1.setPaint(Color.black);
g1.fill(myTriShadow);
// Set Points for Arrow Board
x[0] = x[0] + 2;
x[1] = x[1] + 2;
x[2] = x[2] - 3;
y[0] = y[0] + 5;
y[1] = y[1] - 5;
y[2] = y[2];
// Color colorMeter = robot.getPixelColor(x[2]+10, y[2]);
// Draw Arrow
Polygon myTri = new Polygon(x, y, n); // a triangle
// Color colr = new Color();
g1.setPaint(Color.yellow);
g1.fill(myTri);
// super.paintThumb(g); // replace with your fill()
}
}
又一次,你問了一個問題,我們不能幫你(我看到你刪除了最後一個)。你編寫了自定義代碼,你顯然在代碼中有一個錯誤。由於您尚未發佈SSCCE(http://sscce.org),您希望我們對此做些什麼?我們不知道你有什麼改變。如果您發佈顯示舊代碼的SSCCE並強調您已更改的內容,那麼可能有人會慷慨地查看代碼。否則,我們不介意讀者,也無法猜測你做了什麼。 – camickr 2010-06-03 00:22:59
我感謝你的幫助,但似乎其他人能夠「讀我的腦海」併發布信息,並推動我朝着幫助我的方向前進。 – Landmine 2010-06-03 06:16:02
@Landmine:作爲http://sscce.org/的粉絲,我不會太快折扣camickr的建議。創建一個提供了相當多的洞察力,偶爾會揭示一個直接的解非常好的漸變,順便說一句。 – trashgod 2010-06-03 13:33:56