2013-10-08 6 views
0

Я пытаюсь получить этот код, чтобы изменить цвет фона на случайный цвет, когда я нажимаю 'r'. Пока все работает нормально, кроме изменения цвета фона на случайный цвет. Эта программа - экранная заставка, которую я должен генерировать случайные фигуры в случайных позициях со случайными цветами.Случайный цвет фона

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.Random; 

public class ScreenSaver1 extends JPanel { 
    private JFrame frame = new JFrame("FullSize"); 
    private Rectangle rectangle; 
    boolean full; 

    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     setBackground(Color.BLACK); 
    } 

    ScreenSaver1() { 
     // Remove the title bar, min, max, close stuff 
     frame.setUndecorated(true); 
     // Add a Key Listener to the frame 
     frame.addKeyListener(new KeyHandler()); 
     // Add this panel object to the frame 
     frame.add(this); 
     // Get the dimensions of the screen 
     rectangle = GraphicsEnvironment.getLocalGraphicsEnvironment() 
     .getDefaultScreenDevice().getDefaultConfiguration().getBounds(); 
     // Set the size of the frame to the size of the screen 
     frame.setSize(rectangle.width, rectangle.height); 
     frame.setVisible(true); 
     // Remember that we are currently at full size 
     full = true; 
    } 

// This method will run when any key is pressed in the window 
class KeyHandler extends KeyAdapter { 
    public void keyPressed(KeyEvent e) { 
     // Terminate the program. 
     if (e.getKeyChar() == 'x') { 
      System.out.println("Exiting"); 
      System.exit(0); 
     } 
     else if (e.getKeyChar() == 'r') { 
      System.out.println("Change background color"); 
      setBackground(new Color((int)Math.random() * 256, (int)Math.random() * 256, (int)Math.random() * 256)); 
     } 
     else if (e.getKeyChar() == 'z') { 
      System.out.println("Resizing"); 
      frame.setSize((int)rectangle.getWidth()/2, (int)rectangle.getHeight()); 
     } 
    } 

} 

public static void main(String[] args) { 
     ScreenSaver1 obj = new ScreenSaver1(); 
    } 
} 

ответ

4

Я хотел бы начать с удаления setBackground(Color.BLACK); из метода paintComponent

Другая проблема у Вас есть это с тем, как вы вычислительное ваши случайные значения ...

(int)Math.random() * 256 

Это в основном отливая результат Math.random() в int, который, как правило, приведет к тому, что он станет 0, прежде чем он будет умножен на 256, то есть 0 ...

Вместо этого попробуйте использовать что-то вроде

(int)(Math.random() * 256) 

который будет выполнять расчет Math.random() * 256 перед заливкой результат int

Вы также можете взглянуть на Frame#getExtendedState и Frame#setExtendedState ... это значительно улучшит вашу жизнь ...

+0

Я забыл перекрасить(). Я просто использовал setBackground (Color.BLACK) в качестве теста. также, когда я делаю это, он изменяется только от белого до черного. – Ryel

+0

@Ryel Просмотреть обновления ... – MadProgrammer

+0

, что также имеет смысл. Вот почему он стал черным. – Ryel

0

Попробуйте следующее:

(int)(Math.random() * 256) 

Или это:

Random gen= new Random(); 
getContentPane().setBackground(Color.Black); 

Чтобы получить случайные цвета, попробуйте следующее:

.setBackground(Color.(gen.nextInt(256), gen.nextInt(256), 
       gen.nextInt(256)); 
+0

Пожалуйста, подумайте о том, как форматировать ответы, но для меня это было не совсем понятно. –

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