gpt4 book ai didi

java - 如何去除jSlider的边框

转载 作者:行者123 更新时间:2023-12-01 08:07:32 26 4
gpt4 key购买 nike

我定制了一个jSlider,遇到了一个小问题-

更改值后,我的自定义 jSlider 上显示了一个边框。抱歉,我已经拍了照片,但不允许我发布。未定制的jSlider点击后不会显示这样的边框。

是否有一个我必须重写的方法来摆脱这个边框?预先感谢您!

对不起我的英语!希望任何人都可以帮助我!这是我的定制用户界面:

    public class RedGreenSliderUI extends BasicSliderUI{
Image knobImage ;
private BasicStroke stroke = new BasicStroke(1f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND, 0f, new float[]{1f, 2f}, 0f);
private static final float[] fractions = {0.0f, 0.5f};
private static final Color[] fillColors = {
/* new Color(0x2687AE),*/
/* new Color(0x1658AE)*/
new Color(0xc8041b),
new Color(0xc8041b)
};
private static final Color[] backColors = {
new Color(0x04c814),
new Color(0x04c814)
};

private static final Paint hFillGradient = new LinearGradientPaint(0, 0, 0, 11,
fractions, fillColors, MultipleGradientPaint.CycleMethod.NO_CYCLE);
private static final Paint hBackGradient = new LinearGradientPaint(0, 0, 0, 11,
fractions, backColors, MultipleGradientPaint.CycleMethod.NO_CYCLE);
private static final Paint vFillGradient = new LinearGradientPaint(0, 0, 11, 0,
fractions, fillColors, MultipleGradientPaint.CycleMethod.NO_CYCLE);
private static final Paint vBackGradient = new LinearGradientPaint(0, 0, 11, 0,
fractions, backColors, MultipleGradientPaint.CycleMethod.NO_CYCLE);
private static final Stroke roundEndStroke = new BasicStroke(5,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND);

public RedGreenSliderUI( JSlider aSlider ) {

super( aSlider );

try {

this.knobImage = ImageIO.read(getClass().getResource("ringelblumensalbe- Updater-Grafiken/tongThumb01.png")); //.getClassLoader()


} catch ( IOException e ) {

e.printStackTrace();
}
}
public void paintThumb(Graphics g) {

g.drawImage( this.knobImage, thumbRect.x, thumbRect.y, 15, 30, null );

}
@Override
protected Dimension getThumbSize() {
return new Dimension(15, 30);
}

@Override
protected Color getHighlightColor() {
return new Color(98, 94, 0);
}

public void paintTrack(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

if (slider.getOrientation() == JSlider.HORIZONTAL) {
int cy = (trackRect.height / 2) - 2;
g.translate(trackRect.x, trackRect.y + cy);

g2.setStroke(roundEndStroke);
g2.setPaint(hBackGradient);
g2.drawLine(thumbRect.x, 2, trackRect.width, 2);
g2.setPaint(hFillGradient);
g2.drawLine(0, 2, thumbRect.x, 2);

g.translate(-trackRect.x, -(trackRect.y + cy));
} else {
int cx = (trackRect.width / 2) - 2;
g.translate(trackRect.x + cx, trackRect.y);

g2.setStroke(roundEndStroke);
g2.setPaint(vBackGradient);
g2.drawLine(2, 0, 2, thumbRect.y);
g2.setPaint(vFillGradient);
g2.drawLine(2, thumbRect.y, 2, trackRect.height);

g.translate(-(trackRect.x + cx), -trackRect.y);
}
}

编辑:我明白了。答案是重写 getFocusColor()。

@Override
protected Color getFocusColor(){
return new Color(255,255,255);
}

最佳答案

焦点矩形由 slider 的 UI 委托(delegate)渲染,通常基于 BasicSliderUI。虽然我不提倡取消焦点指示器,但您可以尝试以下方法之一:

  • 使用UIManager设置“Slider.focus”颜色以匹配“Slider.background”

  • 重写paintFocus()方法以不执行任何操作;相关示例可见here .

关于java - 如何去除jSlider的边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20285522/

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