public class Iconshape implements Icon {
private Color color = Color.RED;
public Iconshape (Color c)
{
this.color = c;
}
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
Graphics2D g1 = (Graphics2D) g;
Ellipse2D.Double circle = new Ellipse2D.Double (0, 0, 20, 20);
g1.setColor(color);
g1.fill(circle);
}
@Override
public int getIconWidth() {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getIconHeight() {
// TODO Auto-generated method stub
return 0;
}
public Color setColor(Color c)
{
return this.color = c;
}
}
public class Button {
private static JLabel label;
private static Iconshape icon = new Iconshape(Color.RED);
public static void main(String[] args)
{
JFrame frame = new JFrame();
JButton red = new JButton("Red");
JButton green = new JButton("Green");
JButton blue = new JButton("Blue");
label = new JLabel(icon);
final int FRAME_WIDTH = 600;
final int FRAME_HEIGHT = 400;
red.addActionListener(createRedButtonListener(Color.RED));
blue.addActionListener(createRedButtonListener(Color.BLUE));
green.addActionListener(createRedButtonListener(Color.GREEN));
frame.setSize(FRAME_WIDTH, FRAME_HEIGHT);
frame.setLayout(new FlowLayout());
frame.add(red);
frame.add(blue);
frame.add(green);
frame.add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.pack();
frame.setVisible(true);
}
private static ActionListener createRedButtonListener(Color color) {
return new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
if (color == Color.RED)
{ icon.setColor(Color.RED);
label.repaint();
}
if (color == Color.BLUE)
{ icon.setColor(Color.BLUE);
label.repaint();
}
if (color == Color.GREEN)
{ icon.setColor(Color.GREEN);
label.repaint();
}
}
};
}
}
嗨,我要实现一个在按钮点击时更改标签颜色的程序,但是,Jframe上显示的唯一内容是3个按钮。我可以得到一些帮助吗,我刚刚开始学习时,我不知道很多GUI的东西。
这是我到目前为止的截图
答案 0 :(得分:5)
您的图标宽度和高度为0,因此无需绘制任何内容。
他们getIconHeight()
和getIconWidth()
方法应该返回20,因为这是椭圆的大小。