Poprawność kodu - szybka zmiana koloru tła głównej ramki

0

Zaczynam programować w Javie i mam proste pytanie : czy to jak zaimplementowałem szybką zmianę koloru tła, to eleganckie rozwiązanie? Nie doszedłem jeszcze do wątków - może z nimi byłoby lepsze rozwiązanie? Oto kod:

import java.util.*;
import java.lang.*;
import java.io.*;
import javax.swing.Timer;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class WindowTest
{
	public static void main(String[] args)
	{
		EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				SimpleFrame frame = new SimpleFrame();
				frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				frame.setVisible(true);
			}
		});
	}
}

class SimpleFrame extends JFrame
{
	public SimpleFrame()
	{
		Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension screenSize = kit.getScreenSize();
		setSize(screenSize.width/2, screenSize.height/2);
		setTitle("Test okienek i ramek Java - Swing");
		
		MyComponent panel = new MyComponent();
		add(panel);
		
		ActionListener listener = new TimerBackgroundColor();
		Timer t = new Timer(150, listener);
		t.start();
	}
	
	class TimerBackgroundColor implements ActionListener
	{
		{
			rand = new Random();
		}
		
		public void actionPerformed(ActionEvent event)
		{
			Color c = new Color(rand.nextFloat(),rand.nextFloat(),rand.nextFloat());
			getContentPane().setBackground(c);
		}
		
		private final Random rand;
	}
}

class MyComponent extends JComponent
{
	public void paintComponent(Graphics g)
	{
		g.drawString("Test", 20,20);
	}
}

Pozdrawiam

0

Moim zdaniem dość eleganckie. Zdradź może dlaczego wielokrotnie tworzysz obiekt rand i dlaczego wykluczasz kolor biały? Takie losowanie

Color c = new Color(rand.nextInt(256),rand.nextInt(256),rand.nextInt(256));

dopuści wszystkie kolory.

0

Co rozumiesz przez wielokrotne tworzenie obiektu rand? tworzę raz listener i wtedy powinien wywolac się raz ten blok "konstrukcyjny" gdzie jest rand = new Random();

1 użytkowników online, w tym zalogowanych: 0, gości: 1