перекрасить кнопку свинга с другим градиентом - PullRequest
0 голосов
/ 16 декабря 2010

Как я могу перекрасить JButton с другим градиентом, когда на него нажимают. Я переопределил метод paintComponent (Graphics) для начальной рисования. Onclick Я хочу перекрасить его, но я не хочу, чтобы пользователь делал это в действии actionperformed, поскольку я хочу, чтобы это был отдельный компонент.

Любые идеи, как этого достичь.

Спасибо

Ответы [ 2 ]

7 голосов
/ 16 декабря 2010

Самый простой подход - использовать setPressedIcon(), но вы также можете переопределить paint() в делегате ButtonUI, как показано в этом примере .

4 голосов
/ 01 мая 2011

И еще один забавный пример:

import java.util.List;
import javax.swing.*;
import javax.swing.plaf.ColorUIResource;

public class GradieltButton {

    public static void main(String[] args) {
        Object grad = UIManager.get("Button.gradient");
        List gradient;
        if (grad instanceof List) {
            gradient = (List) grad;
            System.out.println(gradient.get(0));
            System.out.println(gradient.get(1));
            System.out.println(gradient.get(2));
            System.out.println(gradient.get(3));
            System.out.println(gradient.get(4));
            //gradient.set(2, new ColorUIResource(Color.blue));
            //gradient.set(3, new ColorUIResource(Color.YELLOW));
            //gradient.set(4, new ColorUIResource(Color.GREEN));
            //gradient.set(2, new ColorUIResource(221, 232, 243));//origal Color
            //gradient.set(2, new ColorUIResource(255, 255, 255));//origal Color
            //gradient.set(2, new ColorUIResource(184, 207, 229));//origal Color
            gradient.set(2, new ColorUIResource(190, 230, 240));
            gradient.set(3, new ColorUIResource(240, 240, 240));
            gradient.set(4, new ColorUIResource(180, 200, 220));
            //UIManager.put("Button.background", Color.pink);
        }
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new GradieltButton().makeUI();
            }
        });
    }

    public void makeUI() {
        JButton button = new JButton("Click");
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(button);
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

@ ShaggyInjun написал Почему-то мой UIManager.get ("Button.gradient") возвращает ноль Знаете ли вы, почему? Я знаю, что использую MetalTheme.

this Key in UIManager возвращает ColorUIResource ( больше в UIManagerDefaults от @ camickr )

[0,3, 0,0, javax.swing.plaf.ColorUIResource [r = 221, g = 232, b = 243], javax.swing.plaf.ColorUIResource [г = 255, G = 255, B = 255], javax.swing.plaf.ColorUIResource [г = 184, G = 207, B = 229]]

требуется использовать ColorUIResource вместо Gradient, Button.gradien t возвращает arrays of Colors and Insets == ColorUIResource

...