改变 JSlider 的外观和感觉

     2023-04-18     171

关键词:

【中文标题】改变 JSlider 的外观和感觉【英文标题】:Change the JSlider look and feel 【发布时间】:2012-08-30 21:55:16 【问题描述】:

我浏览过这个网站Change look and feel of JSlider 但除了Slider.altTrackColor 没有其他工作。我想做一些如图 1 所示的事情,任何建议都会有很大帮助。我正在开发 JDK 1.6。

UIDefaults defaults = UIManager.getDefaults();    

       defaults.put("Slider.altTrackColor", Color.red);
       defaults.put("Slider.thumb", Color.red);

我也试过这个:

    WindowUtilities.setNativeLookAndFeel();

 // WindowUtilities.setNimbuzzLookAndFeel();

 // WindowUtilities.setJavaLookAndFeel();

WindowUtilities 是告诉系统使用本机外观和感觉的类,就像在以前的版本中一样。否则,Metal (Java) LAF 是默认设置。

public static void setNativeLookAndFeel() 
try 
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 catch(Exception e) 
  System.out.println("Error setting native LAF: " + e);

【问题讨论】:

下次我会记住这一点。谢谢指正 顺便说一句-WindowUtilities 是什么? DYMSwingUtilities?为了尽快获得更好的帮助,请发帖SSCCE。 @AndrewThompson its a class /** 告诉系统使用本机外观,就像以前的 * 版本一样。否则,Metal (Java) LAF 是默认设置。 */ 将其包含在 SSCCE 中。 【参考方案1】:

这是第一张图片中显示的工作 UI 的完整示例: (没有魔法 - 只需要一点图形和基本的 UI 知识)

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Stroke;
import java.awt.geom.GeneralPath;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JSlider;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicSliderUI;

/**
 *
 * @see http://***.com/a/12297384/714968
 */
public class CustomSliderUI extends BasicSliderUI 

    private BasicStroke stroke = new BasicStroke(1f, BasicStroke.CAP_ROUND, 
            BasicStroke.JOIN_ROUND, 0f, new float[]1f, 2f, 0f);

    public CustomSliderUI(JSlider b) 
        super(b);
    

    @Override
    public void paint(Graphics g, JComponent c) 
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
                RenderingHints.VALUE_ANTIALIAS_ON);
        super.paint(g, c);
    

    @Override
    protected Dimension getThumbSize() 
        return new Dimension(12, 16);
    

    @Override
    public void paintTrack(Graphics g) 
        Graphics2D g2d = (Graphics2D) g;
        Stroke old = g2d.getStroke();
        g2d.setStroke(stroke);
        g2d.setPaint(Color.BLACK);
        if (slider.getOrientation() == SwingConstants.HORIZONTAL) 
            g2d.drawLine(trackRect.x, trackRect.y + trackRect.height / 2, 
                    trackRect.x + trackRect.width, trackRect.y + trackRect.height / 2);
         else 
            g2d.drawLine(trackRect.x + trackRect.width / 2, trackRect.y, 
                    trackRect.x + trackRect.width / 2, trackRect.y + trackRect.height);
        
        g2d.setStroke(old);
    

    @Override
    public void paintThumb(Graphics g) 
        Graphics2D g2d = (Graphics2D) g;
        int x1 = thumbRect.x + 2;
        int x2 = thumbRect.x + thumbRect.width - 2;
        int width = thumbRect.width - 4;
        int topY = thumbRect.y + thumbRect.height / 2 - thumbRect.width / 3;
        GeneralPath shape = new GeneralPath(GeneralPath.WIND_EVEN_ODD);
        shape.moveTo(x1, topY);
        shape.lineTo(x2, topY);
        shape.lineTo((x1 + x2) / 2, topY + width);
        shape.closePath();
        g2d.setPaint(new Color(81, 83, 186));
        g2d.fill(shape);
        Stroke old = g2d.getStroke();
        g2d.setStroke(new BasicStroke(2f));
        g2d.setPaint(new Color(131, 127, 211));
        g2d.draw(shape);
        g2d.setStroke(old);
    

    public static void main(String[] args) 
        JFrame frame = new JFrame();
        JSlider slider = new JSlider(0, 100);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
        slider.setMinorTickSpacing(5);
        slider.setMajorTickSpacing(25);
        slider.setUI(new CustomSliderUI(slider));
        frame.add(slider);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    

您可以通过更改返回的边界轻松地修改拇指(抓手)的大小。拇指画将适应任何尺寸。您还可以轻松自定义任何其他滑块部分的绘画。

顺便说一下,这是最终视图:

附:我没有为垂直滑块调整 UI,但这应该不会花费太长时间。

【讨论】:

获得黑暗的外观和感觉? [复制]

】获得黑暗的外观和感觉?[复制]【英文标题】:Gettingadarklookandfeel?[duplicate]【发布时间】:2013-02-0912:53:30【问题描述】:我厌倦了Swing的标准外观和感觉,需要一些看起来很酷的深色和黑色主题。作为秋千的一部分的DefaultMetal、... 查看详情

基维外观和感觉

】基维外观和感觉【英文标题】:KivyLookandFeel【发布时间】:2015-07-0720:08:57【问题描述】:我正在尝试构建一个外观清晰明快的Kivy应用程序,但默认的KivyUI与我的想法不完全一致?有什么方法可以创建自定义主题来赋予您的Kivy... 查看详情

confluence6修改你站点的外观和感觉

你可以为你的Confluence整个站点修改表现以及外观和感觉,也可以为单独的空间进行修改。对整个站点进行的修改将会对使用全局外观和感觉(lookandfeel)的空间一并进行修改。如果某个用户具有空间的管理员权限的话,这个用户... 查看详情

confluence6修改你站点的外观和感觉(代码片段)

你可以为你的Confluence整个站点修改表现以及外观和感觉,也可以为单独的空间进行修改。对整个站点进行的修改将会对使用全局外观和感觉(lookandfeel)的空间一并进行修改。如果某个用户具有空间的管理员权限的话,这个用户... 查看详情

markdown令人敬畏的zsh外观和感觉(代码片段)

查看详情

Java跨平台Swing外观和感觉[重复]

】Java跨平台Swing外观和感觉[重复]【英文标题】:JavacrossplatformSwingLookandFeel[duplicate]【发布时间】:2011-09-0711:46:05【问题描述】:可能重复:Lookandfeelinjava是否有第三方漂亮的Javaswing应用程序L&F?默认的L&F太简单了。【问题... 查看详情

如何使用 CMFCRebar 产生可接受的外观和感觉?

】如何使用CMFCRebar产生可接受的外观和感觉?【英文标题】:HowdoIuseCMFCRebartoproduceanacceptablelookandfeel?【发布时间】:2009-01-1516:03:01【问题描述】:我正在尝试使用MFC功能包中的一些类来改进我的MFC应用程序的外观。在我的应用程... 查看详情

css对于html表,简单的外观和感觉(代码片段)

查看详情

将 HTML 转换为具有外观和感觉的 DOC

】将HTML转换为具有外观和感觉的DOC【英文标题】:ConvertingHTMLtoDOCwithlookandfeel【发布时间】:2014-08-1315:20:22【问题描述】:是否有可能将HTML页面转换为带有一些基本样式(如表格、一些彩色标题、一些图像)的单词?我与python一... 查看详情

为啥当我按下刷新时,选择中的下拉箭头会改变外观和移动位置?

】为啥当我按下刷新时,选择中的下拉箭头会改变外观和移动位置?【英文标题】:WhydoesdropdownarrowinselectchangeappearanceandshiftpositonwhenIpressrefresh?为什么当我按下刷新时,选择中的下拉箭头会改变外观和移动位置?【发布时间】:2... 查看详情

html教程延伸阅读:改变文本的外观和含义

很多标签都可以用来改变文本的外观,并为文本关联其隐藏的含义。总地来说,这些标签可以分成两类:基于内容的样式(content-basedstyle)和物理样式(physicalstyle)。基于内容的样式基于内容的样式标签会告诉浏览器它所包含... 查看详情

更改侦听器在 JSlider 中造成障碍

】更改侦听器在JSlider中造成障碍【英文标题】:ChangelistenercreateshinderanceinJSlider【发布时间】:2014-07-0620:43:58【问题描述】:我写了这段播放音乐的代码,JSlider会随着音乐的进行自动向前移动,我在JSlider中添加了changelistener来用... 查看详情

如何随时间改变元素的外观?

】如何随时间改变元素的外观?【英文标题】:Howtochangeelements\'appearancewithtimeoftheday?【发布时间】:2021-12-2006:40:00【问题描述】:我想根据一天中的时间更改元素的背景图像并更改标题的内容。如果时间在6点到12点之间,bg和文... 查看详情

我可以构建一个在 iOS 5.1 和 iOS 7 上以各自的原生外观和感觉运行的应用程序吗?

】我可以构建一个在iOS5.1和iOS7上以各自的原生外观和感觉运行的应用程序吗?【英文标题】:CanIbuildanappthatrunsoniOS5.1andiOS7intherespectivenativelook&feel?【发布时间】:2013-10-0616:21:26【问题描述】:我有一个主要针对iPad的应用,我... 查看详情

您可以在多大程度上自定义 Fabric 的 Digits 在 Android 上的流程、外观和感觉?

...可以在多大程度上自定义Fabric的Digits在Android上的流程、外观和感觉?【英文标题】:Towhatextentcanyoucustomizetheflow,lookandfeelofFabric\'sDigitsonAndroid?【发布时间】:2015-09-1818:22:46【问题描述】:我正在研究如何通过以下方式在我的应用... 查看详情

有啥办法可以改变 MKMapView 的外观吗?

】有啥办法可以改变MKMapView的外观吗?【英文标题】:IsthereanywaytochangetheappearanceofMKMapView?有什么办法可以改变MKMapView的外观吗?【发布时间】:2013-03-2917:04:01【问题描述】:有没有办法像CoreImage和照片一样操纵MKMapView的外观(... 查看详情

java示例代码_在Netbeans/JavaSwing下,如何以GTK+外观和感觉运行程序

java示例代码_在Netbeans/JavaSwing下,如何以GTK+外观和感觉运行程序 查看详情

在几秒钟后自动更改 jSlider [重复]

】在几秒钟后自动更改jSlider[重复]【英文标题】:ChangejSlideraftercertainsecondsautomatically[duplicate]【发布时间】:2015-05-0605:09:27【问题描述】:我有一个JavaSwing程序,当jSlider更改时,后台程序会在其中执行。但是jSlider不能通过人为... 查看详情