我将使用Swing UI增强应用程序,以允许用户选择颜色,这样他们就不会使用默认的颜色选择。
其他应用程序通常在每个按钮上绘制阴影矩形以激活颜色选择器,当选择新颜色时矩形的颜色会相应改变。我试图通过在按钮上放置一个带有所选颜色的小型JPanel来实现相同的效果,但这会在按钮中间形成一个小方块,而不是填充按钮的大部分表面。
我认为另一种方法是动态生成带有颜色的矩形图标,然后为每个按钮添加适当的图标,但肯定必须有更简单的方法吗?
答案 0 :(得分:3)
JButton.setIcon
的{{1}}
修改
我试图通过在按钮上放置一个带有所选颜色的小型JPanel来实现相同的效果,但这会在按钮中间产生一个小方块,而不是填充按钮的大部分表面。 / p>
仅Rectangle
和JFrame (BorderLayout)
已预先实施JPanel (FlowLayout)
,其余为LayoutManager
(将JComponents
添加到另一个JComponent
)您必须定义JComponent
,please 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,用于指示您的颜色。