【问题标题】:How to make several custom looks of jScrollbar in Synth LaF?如何在 Synth LaF 中自定义 jScrollbar 的几种外观?
【发布时间】:2012-07-05 15:12:11
【问题描述】:

在我们的应用程序中,我们必须使用 css 来自定义 Swing 组件的外观。现在我们有一些手动编写的 css 引擎,但是速度很慢,并且需要大量额外的代码来应用一个 css 文件。所以现在我们尝试使用 Synth 的外观和感觉来使 ui 更改更native

对于大多数组件,我们设置名称并将它们用于绑定到样式。但也有几个滚动条,它们有不同的 css 和不同的外观。影响滚动条拇指的唯一方法是用户区域 ScrollBarThumb,我们无法为其设置名称,因为它不是 JComponent。由于使用区域而不是名称,因此不可能有不同的拇指。有什么解决办法吗?

【问题讨论】:

  • 组件的名称使用像“chat.tabbedpane.panel.label”这样的层次结构,所以可以做这样的事情:如果名称包含“聊天”,则绘制滚动条1。我希望有更好的方法来做到这一点。
  • 如果您使用Classic Synth,请使用xml文件和SSCCE编辑您的问题

标签: java css swing synth


【解决方案1】:
  • 来自 Synt L&F 的实例,我只会使用 Nimbus,关于 Nimbus L&F 的疯狂示例,其余方法在 Nimbus Defaults

来自代码(Java6)

import com.sun.java.swing.Painter;
import java.awt.Color;
import java.awt.Graphics2D;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class ScrollDemo extends JFrame {

    private static final long serialVersionUID = 1L;

    public ScrollDemo() {
        JTextField field = new JTextField();
        String[] columnNames = {"Column"};
        Object[][] data = {
            {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"},
            {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"},
            {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"},
            {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"},
            {"A"}, {"B"}, {"C"}, {"D"}, {"E"}, {"F"},};

        add(new JScrollPane(new JTable(data, columnNames)));
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Exception fail) {
        }
        UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarThumb[Enabled].backgroundPainter",
                new FillPainter(new Color(255, 169, 191)));
        UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarThumb[MouseOver].backgroundPainter",
                new FillPainter(new Color(127, 255, 191)));
        UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarTrack[Enabled].backgroundPainter",
                new FillPainter(new Color(0, 212, 255)));
        UIManager.getLookAndFeelDefaults().put("ScrollBar:\"ScrollBar.button\".size", 20);
        //UIManager.getLookAndFeelDefaults().put("ScrollBar.decrementButtonGap", 10);
        //UIManager.getLookAndFeelDefaults().put("ScrollBar.incrementButtonGap", 10);
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ScrollDemo scrollDemo = new ScrollDemo();
            }
        });
    }
}

class FillPainter implements Painter<JComponent> {

    private final Color color;

    public FillPainter(Color c) {
        color = c;
    }

    @Override
    public void paint(Graphics2D g, JComponent object, int width, int height) {
        g.setColor(color);
        g.fillRect(0, 0, width - 1, height - 1);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多