2014-02-07 2 views
0

В настоящее время я изучаю концепции вычислений с помощью java 2 essentials от Cay Hortmans, И я скопировал эту программу прямо из книги, но она не работает. Я не ищу совершенно отдельный способ сделать это, но просто почему этот код, прямо из книги, неправильно рисует квадрат.Почему эта программа не рисует квадрат?

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

Что вы имеете в виду * не рисовании квадрата правильно *? Вы получаете сообщение об ошибке или рисуете квадрат нежелательным образом? – Christian

+0

@Christian он вообще не рисует квадрат – sirnomnomz

+0

Что возвращает 'getWidth' и' getHeight'? –

ответ

3

Потому что ваш r, g, b значения всех float s, вы ссылаетесь на Color конструкторе, который имеет 3 float параметров: http://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#Color(float, поплавок, поплавок)

создает непрозрачный цвет SRGB с указанным красным , зеленый и синий значения в диапазоне (0.0 - 1.0). По умолчанию Alpha равен 1.0. Фактический цвет, используемый при рендеринге, зависит от нахождения наилучшего соответствия, учитывая цветовое пространство, доступное для конкретного устройства вывода.

Либо изменить r, g, b типы, int или приведение к int

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) 
           ); 
+0

Это все еще возвращает ошибку @huseyin – sirnomnomz

+2

@sirnomnomz Какая ошибка? – Christian

+0

Предупреждение: не удается прочитать файл свойств AppletViewer: \\ * Приватный * Использование значений по умолчанию. Не удается сохранить свойства пользователя файл: \\ fwusdpubprof \ fwhs \ Profiles \ webprg7 \ студенты \ .appletviewer java.lang.IllegalArgumentException: параметр Цвет вне ожидаемого диапазона: Красный Зеленый Синий \t в java.awt.Color.testColorValueRange (Неизвестный источник) \t на java.awt.Color. (Неизвестный источник) \t at java.awt.Color. (Неизвестный источник) \t at java.awt.Color. (Unknown Source) \t на ColorSelect.init (ColorSelect.java:20) \t в sun.applet.AppletPanel.run (Unknown Source) \t на java.lang.Thread.run (Unknown Source) – sirnomnomz

1

Извините, ребята, я понял, что при вменении я использовал значения int, а не плавал, плохо.

Смежные вопросы