我们刚刚开始使用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);
}
}
实际的任务是画一个椭圆,用黑色填充背景并在下面放一个标签。除了我的问题,除了先绘制一个单独的矩形之外,是否有可能用椭圆填充椭圆的背景?
答案 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);
}
结果
注意您不应该在顶级容器中绘制,最好在Panel
中添加组件并覆盖面板中的绘制方法。