如何在JButton上绘制彩色矩形?

时间:2012-04-26 12:59:32

标签: java swing jbutton

我将使用Swing UI增强应用程序,以允许用户选择颜色,这样他们就不会使用默认的颜色选择。

其他应用程序通常在每个按钮上绘制阴影矩形以激活颜色选择器,当选择新颜色时矩形的颜色会相应改变。我试图通过在按钮上放置一个带有所选颜色的小型JPanel来实现相同的效果,但这会在按钮中间形成一个小方块,而不是填充按钮的大部分表面。

我认为另一种方法是动态生成带有颜色的矩形图标,然后为每个按钮添加适当的图标,但肯定必须有更简单的方法吗?

3 个答案:

答案 0 :(得分:3)

example

添加预期JButton.setIcon的{​​{1}}

修改

  

我试图通过在按钮上放置一个带有所选颜色的小型JPanel来实现相同的效果,但这会在按钮中间产生一个小方块,而不是填充按钮的大部分表面。 / p>

RectangleJFrame (BorderLayout)已预先实施JPanel (FlowLayout),其余为LayoutManager(将JComponents添加到另一个JComponent )您必须定义JComponentplease read this thread

答案 1 :(得分:2)

以下是使用适用于我的setBackground的示例:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test {

    public static void main(String... args) {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        final JButton button = new JButton("Hello");
        button.setOpaque(true);
        panel.add(button);
        button.setBackground(Color.RED);
        button.setOpaque(true);
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                Color c = JColorChooser.showDialog(button, "Choose a color", button.getBackground());
                if (c != null) {
                    button.setBackground(c);
                }
            }
        });
        frame.setContentPane(panel);
        frame.setPreferredSize(new Dimension(800, 600));
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setVisible(true);
    }
}

答案 2 :(得分:1)

使用JComponent.drawComponent(...)方法绘制每个swing组件,如果需要,可以覆盖默认行为。例如,制作一个像你建议的面板。值得注意的是,您可以更改jpanels背景颜色以实现完全相同的效果。

    JColorChooser chooser = new JColorChooser(Color.BLACK);
    chooser.setVisible(true);

    Color color = chooser.getColor();
    if (color!=null) {
        colorPanel.setBackground(color);
    }

colorPanel将是您的JPanel,用于指示您的颜色。