Java 1.0 Applet - 不兼容的类型:选择无法转换为Button - Java在一个坚果壳中示例1-2

时间:2016-07-17 21:32:19

标签: java applet

我正在尝试从处理Java 1.0的Java In A Nutshell Book中编译示例1-2。我得到一个错误,说选择无法转换为Button。现在,我不知道这是否是当前Java不支持我正在调用的库,或者某些东西已关闭的问题。

小程序应该是一种绘图板,错误位于第14行/ clear_button = new Choice();

import java.applet.*;
import java.awt.*;

public class Scribble extends Applet {
    private int last_x = 0;
    private int last_y = 0;
    private Color current_color = Color.black;
    private Button clear_button;
    private Choice color_choices;

public void init(){
    this.setBackground(Color.white);

    clear_button = new Choice();
    clear_button.setForeground(Color.black);
    clear_button.setBackground(Color.lightGray);
    this.add(clear_button);

    color_choices = new Choice();
    color_choices.addItem("black");
    color_choices.addItem("red");
    color_choices.addItem("yellow");
    color_choices.addItem("green");
    color_choices.setForeground(Color.black);
    color_choices.setBackground(Color.lightGray);
    this.add(new Label("Color: "));
    this.add(color_choices);
}

public boolean mouseDown(Event e, int x, int y){
    last_x = x; last_y = y;
    return true;
}

public boolean mouseDrag(Event e, int x, int y){
    Graphics g = this.setGraphics();
    g.setColor(current_color);
    g.drawline(last_x, last_y, x, y);
    last_x = x;
    last_y = y;
    return true;
}

public boolean action(Event event, Object arg) {
    if (event.target == clear_button) {
        Graphics g = this.getGraphics();
        Rectangle r = this.bounds();
        g.setColor(this.getBackground());
        g.fillRect(r.x, r.y, r.width, r.height);
        return true;
    }

    else if (event.target == color.choices) {
        if (arg.equals("black")) current_color = color.black;
        else if (arg.equals("red")) current_color = color.red;
        else if (arg.equals("yellow")) current_color = color.yellow;
        else if (arg.equals("green")) current_color = color.green;
        return true;
    }

    else return super.action(event, arg);

 }
}

1 个答案:

答案 0 :(得分:1)

这是因为Choice不会从Button扩展。类型不兼容。

https://docs.oracle.com/javase/7/docs/api/java/awt/Choice.html

为了解决这个问题,您需要将clear_button的类型更改为选择,如下所示:

private Choice clear_button;

我刚检查了旧的java 1.0.2文档,而Choice也没有从Button扩展:

http://web.mit.edu/java_v1.0.2/www/javadoc/java.awt.Choice.html#top

根据您的评论,this.setGraphics()在现代Java中既不存在于Java 1.0.2中也不存在。

从你的代码判断你应该用this.getGraphics()替换它。

获取Graphics处理程序的另一种方法是覆盖:

public void paint(Graphics g)

您可以在班级中覆盖此方法。