同时显示标签和形状

时间:2013-06-11 20:23:28

标签: java awt

我们刚刚开始使用AWT使用AWT进行GUI编程。我的任务是绘制一个椭圆并将其与标签一起显示。不知怎的,我无法弄清楚如何同时显示它们。我一添加

add(label);

到我的程序它只显示标签。 那是我的代码到目前为止......

import java.awt.*;
public class Ellipse extends Frame{

public static void main (String args[]) {
    new Ellipse("Ellipse");
}

public void paint(Graphics g){
    Graphics shape = g.create();
    shape.setColor(Color.black);
    shape.fillRect(100,80,100,40);
    shape.setColor(Color.red);
    shape.fillOval(100,80,100,40);

} 

Ellipse(String s){
        super(s);
        setLocation(40,40);
        setSize(300,300);
        setBackground(Color.white);
        Font serif = new Font("Serif", 1, 10);
        setFont(serif);
        Label label = new Label("Ellipse 1",1);
        add(label);
        setVisible(true);
}
}

实际的任务是画一个椭圆,用黑色填充背景并在下面放一个标签。除了我的问题,除了先绘制一个单独的矩形之外,是否有可能用椭圆填充椭圆的背景?

1 个答案:

答案 0 :(得分:2)

首先,当你重写一个方法时,你应该调用parent方法调用,因为你可以打破liskov替换原则。

@Override
    public void paint(Graphics g){
        super.paint(g);
        Graphics shape = g.create();
        shape.setColor(Color.black);
        shape.fillRect(100,80,100,40);
        shape.setColor(Color.red);
        shape.fillOval(100,80,100,40);
        shape.dispose();// And if you create it, you should dispose it   
    } 

并且椭圆没有显示因为你从未设置过布局,在你的构造函数中你必须放置这样的东西

    Ellipse(String s){
        super(s);
        setLocation(40,40);
        setLayout(new FlowLayout());
        setSize(300,300);
        setBackground(Color.white);
        Font serif = new Font("Serif", 1, 10);
        setFont(serif);
        Label label = new Label("Ellipse 1",1);
        add(label);
        pack(); // size the frame
        setVisible(true);
}

结果

frame result

注意您不应该在顶级容器中绘制,最好在Panel中添加组件并覆盖面板中的绘制方法。