为什么这个节目没有吸引广场?

时间:2014-02-07 18:13:33

标签: java swing

我目前正在学习Cay Hortmans的Java 2 essentials计算概念, 我直接从书中复制了这个程序,但它没有用。我不是在寻找一种完全独立的方式来做这件事,而是为什么直接来自这本书的代码没有正确地绘制正方形。

import java.applet.*;
import java.awt.*;
import javax.swing.JOptionPane;

public class ColorSelect extends Applet{

    private static final long serialVersionUID = -7954365679431207534L;

    public void init(){
        String input; //ask the user for red, green, blue values

        input = JOptionPane.showInputDialog("Red:");
        float red = Float.parseFloat(input);

        input = JOptionPane.showInputDialog("Green:");
        float green = Float.parseFloat(input);

        input = JOptionPane.showInputDialog("Blue:");
        float blue = Float.parseFloat(input);
        fillColor = new Color(red, green, blue);
    }

    public void paint(Graphics g){
        final int SQUARE_LENGTH = 100;

        Graphics2D g2 = (Graphics2D)g;

        //select color into graphics content

        g2.setColor(fillColor);

        //construct and fill a square whose center is the center of the window

        Rectangle square = new Rectangle(
                (getWidth() - SQUARE_LENGTH) / 2,
                (getHeight() -  SQUARE_LENGTH) / 2,
                SQUARE_LENGTH,
                SQUARE_LENGTH);

        g2.fill(square);
    }
    private Color fillColor;
}

3 个答案:

答案 0 :(得分:3)

由于您的rgb值均为float,因此您调用的Color构造函数为3 float参数:http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#Color(float,float,float)

  

使用指定的红色,绿色和蓝色值(0.0 - 1.0)创建不透明的sRGB颜色。 Alpha默认为1.0。渲染中使用的实际颜色取决于在给定特定输出设备可用的颜色空间的情况下找到最佳匹配。

r, g, b类型更改为int或投放到int

答案 1 :(得分:1)

对不起伙计们,我意识到当我使用int值而不是浮动时,我很糟糕。

答案 2 :(得分:0)

Rectangle指定两个相对角的边界,就像fill()想要的那样。你需要

Rectangle square = new Rectangle(
                                  (getWidth()/2 - SQUARE_LENGTH/2),
                                  (getHeight()/2 -  SQUARE_LENGTH/2),
                                  (getWidth()/2 + SQUARE_LENGTH/2),
                                  (getHeight()/2 +  SQUARE_LENGTH/2)
                                );