2

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

It is common for other applications to have shaded rectangles drawn on each button that activates a color selector, with the rectangle's color changing accordingly when a new color is selected. 我试图通过在按钮上放置一个带有所选颜色的小 JPanel 来达到相同的效果,但这会导致按钮中间出现一个小方块,而不是填充按钮的大部分表面。

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

4

3 回答 3

3

放在JButton.setIcon那里Rectangle例如

编辑

我试图通过在按钮上放置一个带有所选颜色的小 JPanel 来达到相同的效果,但这会导致按钮中间出现一个小方块,而不是填充按钮的大部分表面。

只有JFrame (BorderLayout)并且JPanel (FlowLayout)已经预先实现,对于您必须定义LayoutManager的其余部分JComponents(将一个添加JComponent到另一个) ,请阅读此线程JComponentLayoutManager

于 2012-04-26T13:04:28.770 回答
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);
    }
}
于 2012-04-26T13:20:26.390 回答
1

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

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

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

其中 colorPanel 将是您的 JPanel,指示您的颜色。

于 2012-04-26T13:08:29.427 回答