我目前正在学习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;
}
答案 0 :(得分:3)
由于您的r
,g
,b
值均为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)
);