Java 使用paintThumb I';如果我的箭在0或100时从JSlider上掉下来,怎么能修复?

Java 使用paintThumb I';如果我的箭在0或100时从JSlider上掉下来,怎么能修复?,java,swing,paint,jslider,Java,Swing,Paint,Jslider,这幅画解释了一切。我画了一个新拇指,当高于95或低于5时,它会离开JSlider区域。我试过在跑道上填充,但没有成功 有人有什么建议吗 这是我的密码。我相信我的问题是在大小覆盖下调整拇指的大小 private static class MySliderUI extends BasicSliderUI { private int thumbHeight = 22; private int thumbWidth = 22; public MySliderUI(JSlid

这幅画解释了一切。我画了一个新拇指,当高于95或低于5时,它会离开JSlider区域。我试过在跑道上填充,但没有成功

有人有什么建议吗

这是我的密码。我相信我的问题是在大小覆盖下调整拇指的大小

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()
    }

}
覆盖,返回拇指边框的尺寸。如果不是对称的,则应考虑滑块的位置


补充:作为旁白,拇指的顶部没有“脱落”;它被剪掉了。有关剪辑矩形的更多信息,请参见。

您又问了一个我们无法帮助您的问题(我看到您删除了最后一个问题)。您已经编写了自定义代码,显然代码中有一个bug。既然您没有发布SSCCE(),您希望我们对此做些什么?我们不知道你改变了什么。如果您发布了一个SSCCE,其中显示了旧代码并突出显示了您所做的更改,那么可能有人会慷慨地查看代码。否则我们不会读心术,也猜不到你做了什么。我感谢你的帮助,但似乎其他人能够“读我的心术”并发布信息,推动我朝着帮助我的方向前进。@Minel:作为的粉丝,我不会太快地对camickr的建议打折扣。仅仅创建一个就可以提供相当多的洞察力,偶尔还可以提供即时解决方案。非常好的渐变,顺便说一句。我对Java和SF非常陌生,所以如果我没有发布理想的方式,我很抱歉,我会努力更好地帮助SF帮助我。@Minel:太好了!我曾经使用过
RadialGradientPaint
,但忽略了
LinearGradientPaint
;谢谢下面是一些基本代码,用于缩放和旋转您可能喜欢的多边形。