简体   繁体   中英

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

在此处输入图片说明

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM