标签不显示在Jframe上

时间:2015-10-06 18:39:24

标签: java swing jbutton actionlistener jlabel

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的东西。

这是我到目前为止的截图

enter image description here

1 个答案:

答案 0 :(得分:5)

您的图标宽度和高度为0,因此无需绘制任何内容。

他们getIconHeight()getIconWidth()方法应该返回20,因为这是椭圆的大小。