如何将渐变颜色添加到放置在jtoolbar中的Jbuttons

时间:2014-04-29 07:23:44

标签: java swing netbeans jbutton jtoolbar

我正在使用netbeans平台模块来开发此桌面应用程序。我正在开发中使用netbeans中的拖放工具。

我需要创建一个按钮很少的工具栏。我需要为这些按钮创建渐变颜色。

我拖放JToolBar,我拖了它并放置了JButton个对象。 在按钮的属性中,我选择了一种颜色,我想要一种阴影颜色。在我修改的自定义代码中。

jbutton = new javax.swing.Jbutton();

如下

jbutton = new javax.swing.JButton(){
    @Override
    protected void paintComponent(Graphics grphcs) {
        Graphics2D g2d = (Graphics2D) grphcs;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
           RenderingHints.VALUE_ANTIALIAS_ON);
        GradientPaint gp = new GradientPaint(0, 0,
            getBackground().brighter().brighter().brighter(), 0, getHeight(),
            getBackground().darker());
         g2d.setPaint(gp);
        g2d.fillRect(0, 0, getWidth(), getHeight());
        super.paintComponent(grphcs);
    }};

当我在我的项目中使用上面的代码JPanel时,它可以工作,但是当我用它作为按钮时,它没有显示任何效果。

如何为放置在工具栏中的按钮获取渐变颜色?

1 个答案:

答案 0 :(得分:2)

该按钮具有contentAreaFilled属性,用于确定外观是否应绘制按钮的内容区域。当您致电super.paintComponent时,外观代表将描绘您所做的事情。

您可以将此属性设置为false,然后它就可以正常工作。

例如......

RoundButton

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagLayout;
import java.awt.RenderingHints;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class GradientButtons {

    public static void main(String[] args) {
        new GradientButtons();
    }

    public GradientButtons() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new GridBagLayout());
                frame.add(new RoundButton("Click me"));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class RoundButton extends JButton {

        public RoundButton(String text) {
            super(text);
            setBorderPainted(false);
            setContentAreaFilled(false);
            setFocusPainted(false);
            setOpaque(false);
        }

        @Override
        public Dimension getPreferredSize() {
            Dimension size = super.getPreferredSize();
            int radius = Math.max(size.width, size.height);
            size.width = radius;
            size.height = radius;
            return size;
        }

        @Override
        protected void paintComponent(Graphics g) {
            Graphics2D g2d = (Graphics2D) g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            GradientPaint gp = new GradientPaint(0, 0,
                    Color.RED, 0, getHeight(),
                    Color.YELLOW);
            g2d.setPaint(gp);
            g2d.fillOval(0, 0, getWidth(), getHeight());
            super.paintComponent(g);
        }

    }

}

您可能需要查看ButtonModel的{​​{1}}和/或armed状态,这样您也可以更改点击按钮的方式,建议...