Search code examples
javaswingjbuttonactionlistenerjlabel

label doesnt show on Jframe


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();
                    }
                }
             };
}   
}

Hi, I'm to implement a program that change label color on button click, however, the only thing that shows on the Jframe is the 3 buttons. Can I get some help please, I'm don't know a lot of GUI things as I just started learning.

this is a screenshot of what i have so far

enter image description here


Solution

  • Your icon width and height are 0, so there is nothing to paint.

    They getIconHeight() and getIconWidth() methods should return 20, since that is the size of your oval.