0

このアプリケーションでは、css を使用して Swing コンポーネントの外観をカスタマイズする必要があります。現在、手動で作成された css エンジンがいくつかありますが、速度が遅く、もう 1 つの css ファイルを適用するには多くの追加コードが必要です。そのため、Synth のルック アンド フィールを使用して、UI の変更をよりネイティブにしようとしています。

ほとんどのコンポーネントでは、名前を設定し、スタイルへのバインドに使用します。しかし、いくつかのスクロールバーもあり、それらは css が異なり、見た目も異なります。スクロールバーのサムに影響を与える唯一の方法は、ユーザー領域 ScrollBarThumb を使用することです。これは JComponent ではないため、名前を設定することはできません。名前の代わりに地域を使用しているため、親指の見た目を変えることはできません。回避策はありますか?

4

1 に答える 1

3

ここに画像の説明を入力してください ここに画像の説明を入力してください

コードから(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);
    }
}
于 2012-07-05T15:21:31.203 に答える