Java Swing 自定义主题

1. 主题文件

package io.bbn.openmap.app;

import java.awt.*;
import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.plaf.metal.MetalLookAndFeel;

public class MyCustomLookAndFeel extends MetalLookAndFeel {
    @Override
    public String getName() {
        return "My Custom Look and Feel";
    }

    @Override
    public String getID() {
        return "MyCustomLookAndFeel";
    }

    @Override
    public boolean isNativeLookAndFeel() {
        return false;
    }

    @Override
    public boolean isSupportedLookAndFeel() {
        return true;
    }

    // 这里可以添加自定义 UI 组件的初始化代码
    // 例如,设置默认的颜色、字体等
 // 创建自定义的 UIDefaults
    @Override
    public UIDefaults getDefaults() {
        UIDefaults defaults = super.getDefaults();
        
        // 设置颜色
        defaults.put("Panel.background", new Color(200, 200, 200));
        defaults.put("Button.background", new Color(100, 100, 100));
        defaults.put("Button.foreground", Color.WHITE);
        
        // 设置字体
        defaults.put("Button.font", new Font("Serif", Font.BOLD, 18));
        
        // 设置边框
        defaults.put("Button.border", BorderFactory.createLineBorder(Color.BLACK));
        
        // 添加更多自定义属性...
        
        return defaults;
    }
}

2. 测试文件

package io.bbn.openmap.app;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CustomLookAndFeelDemo {

    public static void main(String[] args) {
        try {
            // 注册自定义的 LookAndFeel
            UIManager.installLookAndFeel("MyCustomLookAndFeel", MyCustomLookAndFeel.class.getName());
            
            // 设置自定义的 LookAndFeel
            UIManager.setLookAndFeel(new MyCustomLookAndFeel());
            
            // 使用 SwingUtilities.invokeLater 来确保 GUI 的更新在事件调度线程中执行
            SwingUtilities.invokeLater(() -> {
                // 创建 JFrame 实例
                JFrame frame = new JFrame("Custom Look and Feel Demo");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(300, 200);
                
                // 创建一个按钮并添加到 JFrame
                JButton button = new JButton("Click Me!");
                button.addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        System.out.println("Button clicked!");
                    }
                });
                frame.getContentPane().add(button);
                
                // 显示 JFrame
                frame.setVisible(true);
            });
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
            System.err.println("Custom LookAndFeel is not supported: " + e.getMessage());
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值